sql >> Databáze >  >> RDS >> Sqlserver

Odkazování na alias sloupce v klauzuli WHERE

SELECT
   logcount, logUserID, maxlogtm,
   DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE ( DATEDIFF(day, maxlogtm, GETDATE() > 120)

Normálně nemůžete odkazovat na aliasy polí v WHERE doložka. (Představte si to jako celý SELECT včetně aliasů se použije za WHERE doložka.)

Ale jak je uvedeno v jiných odpovědích, můžete přinutit SQL, aby zpracoval SELECT který se má zpracovat před WHERE doložka. To se obvykle provádí pomocí závorek k vynucení logického pořadí operací nebo pomocí společného tabulkového výrazu (CTE):

Závorka/podvýběr:

SELECT
   *
FROM
(
   SELECT
      logcount, logUserID, maxlogtm,
      DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
   FROM statslogsummary   
) as innerTable
WHERE daysdiff > 120

Nebo se podívejte na Adamovu odpověď pro CTE verzi téhož.



  1. Filtrované indexy a zahrnuté sloupce

  2. Jak dešifrovat heslo ze serveru SQL?

  3. Jak resetuji sekvenci v Oracle?

  4. Příklad ze skutečného života, kdy použít OUTER / CROSS APPLY v SQL