sql >> Database teknologi >  >> RDS >> Sqlserver

Henvisning til et kolonnealias i en WHERE-klausul

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

Normalt kan du ikke henvise til feltaliasser i WHERE klausul. (Tænk på det som hele SELECT inklusive aliaser, anvendes efter WHERE klausul.)

Men som nævnt i andre svar kan du tvinge SQL til at behandle SELECT skal håndteres før WHERE klausul. Dette gøres normalt med parenteser for at fremtvinge logisk operationsrækkefølge eller med et almindeligt tabeludtryk (CTE):

Parentes/Undervælg:

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

Eller se Adams svar for en CTE-version af det samme.



  1. Er der en bedre Oracle-operatør til at udføre nul-sikker ligestillingskontrol?

  2. Sådan planlægges en lagret procedure i MySQL

  3. Sådan migrerer du databaser og datafiler

  4. MySQL pivot række til dynamisk antal kolonner