亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

引用WHERE子句中的列別名

引用WHERE子句中的列別名

白板的微信 2019-07-02 17:19:36
引用WHERE子句中的列別名SELECT logcount, logUserID, maxlogtm   , DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiffFROM statslogsummaryWHERE daysdiff > 120我得到“無效列名daysdiff”。Maxlogtm是一個datetime字段。是這些小事讓我發瘋。
查看完整描述

3 回答

?
冉冉說

TA貢獻1877條經驗 獲得超1個贊

SELECT
   logcount, logUserID, maxlogtm,
   DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiffFROM statslogsummaryWHERE ( 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 innerTableWHERE daysdiff > 120

或者看亞當的答案,一個相同的CTE版本。


查看完整回答
反對 回復 2019-07-02
?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

如果要在WHERE子句中,您需要將其包裝在子SELECT中,或CTE:


WITH LogDateDiff AS

(

   SELECT logcount, logUserID, maxlogtm

      , DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff

   FROM statslogsummary

)

SELECT logCount, logUserId, maxlogtm, daysdiff

FROM LogDateDiff

WHERE daysdiff > 120


查看完整回答
反對 回復 2019-07-02
?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

如果不想列出CTE中的所有列,另一種方法是使用outer apply:

select
    s.logcount, s.logUserID, s.maxlogtm,
    a.daysdifffrom statslogsummary as s    outer apply (select datediff(day, s.maxlogtm, getdate()) as daysdiff) as awhere a.daysdiff > 120


查看完整回答
反對 回復 2019-07-02
  • 3 回答
  • 0 關注
  • 703 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號