簡體   English   中英

在同一條選擇語句中選擇別名

[英]Select alias in same select statement

    i.Notes, SUM(l.Discount) AS Dcount, i.DiscDate, i.DueDate, i.UIMth, i.UISeq, poj.Job, poj.Description, i.UniqueAttchID, i.ReviewerGroup AS RevGrp, SUM(l.GrossAmt) 
                     AS GrossAmt, v.PayTerms, dbo.HQPT.DiscRate, i.InvTotal, DATEDIFF(day,getdate(),i.DiscDate) AS DiscDays,
--Trying to use the DiscDays and Dcount here    
                    if DiscDays, between '20' and '11' THEN sum(Dcount) as YelDisc  

我希望有人可以在這里為我提供幫助。 我是T-SQL的新手。 我相信這里我需要一個子查詢,但是我不確定如何正確設置其格式

謝謝

  1. IF用於程序流,不是表達式
  2. 您不能在另一列中重復使用別名
  3. 比較數值結果時,請不要在引號中包含常量值

嘗試

CASE WHEN DATEDIFF(day,getdate(),i.DiscDate) between 20 and 11 
         THEN sum(Dcount) 
     ELSE 0 
END as YelDisc 

可以執行子查詢以重用別名,但是對於這樣一個相對簡單的表達式,結果集中的列數可能不值得。

您不能在同一查詢中引用別名,但是可以執行以下操作:

      select
      i.Notes, 
      SUM(l.Discount) AS Dcount, 
      i.DiscDate, 
      i.DueDate, 
      i.UIMth, 
      i.UISeq, 
      poj.Job, 
      poj.Description, 
      i.UniqueAttchID, 
      i.ReviewerGroup AS RevGrp, 
      SUM(l.GrossAmt) AS GrossAmt, 
      v.PayTerms, 
      dbo.HQPT.DiscRate, 
      i.InvTotal, 
      DATEDIFF(day,getdate(),i.DiscDate) AS DiscDays,

    --Trying to use the DiscDays and Dcount here    
        case
            when DATEDIFF(day,getdate(),i.DiscDate)  between '11' and '20'                 THEN sum(Dcount) 
            when DATEDIFF(day,getdate(),i.DiscDate)  between '20' and '40'         THEN sum(Dcount)/2 
            else 0 -- this is the default case that doesn't match your cases, it could return NULL 
        end as YelDisc  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM