sql >> データベース >  >> RDS >> Sqlserver

WHERE句で列エイリアスを参照する

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

    通常、WHEREでフィールドエイリアスを参照することはできません 句。 (SELECT全体と考えてください エイリアスを含め、WHEREの後に適用されます 条項。)

    ただし、他の回答で述べたように、SQLにSELECTを処理させることができます。 WHEREの前に処理されます 句。これは通常、操作の論理的な順序を強制するために括弧を使用するか、共通テーブル式(CTE)を使用して実行されます。

    括弧/副選択:

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

    または、同じCTEバージョンについてはAdamの回答を参照してください。



    1. MS Accessの破損パート2:予防と回復のためのベストプラクティス

    2. 「ALTERTABLESWITCHステートメントが失敗しました」を修正する方法メッセージ4982(SQL Server)

    3. SQL Serverの照合で、大文字と小文字を区別するものから大文字と小文字を区別しないものに変更しますか?

    4. SQLite-テーブルを変更する