Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verweis auf einen Spaltenalias in einer WHERE-Klausel

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

Normalerweise können Sie im WHERE nicht auf Feldaliase verweisen Klausel. (Stellen Sie sich das als das gesamte SELECT vor einschließlich Aliase, wird nach dem WHERE angewendet Klausel.)

Aber wie in anderen Antworten erwähnt, können Sie SQL zwingen, SELECT zu behandeln vor dem WHERE behandelt werden Klausel. Dies geschieht normalerweise mit Klammern, um die logische Reihenfolge der Operationen zu erzwingen, oder mit einem Common Table Expression (CTE):

Klammer/Unterauswahl:

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

Oder siehe Adams Antwort für eine CTE-Version derselben.