none
SQL-Formel auf definierte Alias-Namen beziehen RRS feed

  • Frage

  • Hallo,

    ich spiele mich gerade etwas in SQL herum.

    Ist es möglich, dass ich in SQL ein Feld berechnen lasse, dieses sich auf ein vorher errechnetes Feld bezieht, diesem ich einen eigenen Namen gegeben habe? Ich hoffe mit diesem Bild kann ich besser beschreiben was ich meine:

    Mein Ziel ist es, dass ich den neuen Wert direkt über die Felder "Step_In" und "Step_out" ermitteln kann und nicht immer über den kompletten "Pfad" (dbo.Tabele.Feldname) gehen muss.

    Danke im voraus.

    Donnerstag, 1. Oktober 2020 18:26

Antworten

  • Hi,

    ich würde das mit einer CTE machen.

    WITH StepsQuery AS
    (
    SELECT ID,
           CONVERT( ... ) AS Step_In,
           CONVERT( ... ) AS Step_Out
    FROM   Tabelle
    )
    SELECT ...
    FROM   Tabelle t
           INNER JOIN StepsQuery sq ON t.ID = sq.ID
    WHERE  sq.Step_In = 'Abc'
    ...

    Oder alternativ, wenn man nicht nochmal auf die Originaltabelle zugreifen will:

    WITH StepsQuery AS
    (
    SELECT ID,
           CONVERT( ... ) AS Step_In,
           CONVERT( ... ) AS Step_Out,
           ... -- Alle anderen Spalten
    FROM   Tabelle
    )
    SELECT ...
    FROM   StepsQuery sq
    WHERE  Step_In = 'Abc'
    ...


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport



    Donnerstag, 1. Oktober 2020 19:20
    Moderator
  • Vom Grundsatz her kann ein umbenannter Ausdruck nur außerhalb des Ergebnisses verwendet werden, also

    select neuername from ( select a*b [as] neuername from mytable ) aliasname

    with 
    alias1 as (
      select a*b [as] neuername1
        from mytable 
    ),
    
    alias2 as (
    select 
      neuername1
     ,neuername1 * 2 [as] neuername2
     from alias1
    )
    
    select neuername1, neuername2
      from alias2

    Dies kann fast beliebig geschachtelt werden je nach Implementation bis 256 Ebenen.
    Einfacher und auch übersichtlicher ist immer eine CTE-Lösung, auch wenn es am Prinzip nichts ändert.

    Donnerstag, 1. Oktober 2020 19:36

Alle Antworten

  • Hi,

    ich würde das mit einer CTE machen.

    WITH StepsQuery AS
    (
    SELECT ID,
           CONVERT( ... ) AS Step_In,
           CONVERT( ... ) AS Step_Out
    FROM   Tabelle
    )
    SELECT ...
    FROM   Tabelle t
           INNER JOIN StepsQuery sq ON t.ID = sq.ID
    WHERE  sq.Step_In = 'Abc'
    ...

    Oder alternativ, wenn man nicht nochmal auf die Originaltabelle zugreifen will:

    WITH StepsQuery AS
    (
    SELECT ID,
           CONVERT( ... ) AS Step_In,
           CONVERT( ... ) AS Step_Out,
           ... -- Alle anderen Spalten
    FROM   Tabelle
    )
    SELECT ...
    FROM   StepsQuery sq
    WHERE  Step_In = 'Abc'
    ...


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport



    Donnerstag, 1. Oktober 2020 19:20
    Moderator
  • Vom Grundsatz her kann ein umbenannter Ausdruck nur außerhalb des Ergebnisses verwendet werden, also

    select neuername from ( select a*b [as] neuername from mytable ) aliasname

    with 
    alias1 as (
      select a*b [as] neuername1
        from mytable 
    ),
    
    alias2 as (
    select 
      neuername1
     ,neuername1 * 2 [as] neuername2
     from alias1
    )
    
    select neuername1, neuername2
      from alias2

    Dies kann fast beliebig geschachtelt werden je nach Implementation bis 256 Ebenen.
    Einfacher und auch übersichtlicher ist immer eine CTE-Lösung, auch wenn es am Prinzip nichts ändert.

    Donnerstag, 1. Oktober 2020 19:36