簡體   English   中英

SQL中兩個計算列的總和

[英]Sum of two calculated columns in SQL

我正在計算兩行,如下所示:

CASE 
    WHEN isnumeric(SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1)) = 1
        THEN SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1) 
    else 0 
end AS RoomNumber,
CASE 
    WHEN isnumeric(SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number))) = 1
        THEN SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number)) 
    else 0 
end AS HallNumber,

我需要創建另一個列來計算RoomNumber和HallNumber的總和,我試過這個:

SELECT *, (RoomNumber + HallNumber) AS Sum
FROM Table

但我得到了無效的列名錯誤。 我怎樣才能得到這兩列的總和? 謝謝。

您實際上只有兩個選項,因為您無法在定義它的同一級別重用別名。 您可以將兩個CASE語句加在一起:

CASE WHEN isnumeric(SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1)) = 1
     THEN SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1) 
     ELSE 0 END AS RoomNumber,
CASE WHEN isnumeric(SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number))) = 1
     THEN SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number)) 
     ELSE 0 END AS HallNumber,
(CASE WHEN isnumeric(SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1)) = 1
     THEN SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1) 
     ELSE 0 END
+
CASE WHEN isnumeric(SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number))) = 1
     THEN SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number)) 
     ELSE 0 END) AS Sum

或者,您可以嘗試將當前查詢包裝為子查詢,其中您已定義的別名可用:

SELECT t.RoomNumber,
       t.HallNumber,
       (t.RoomNumber + t.HallNumber) AS Sum
FROM
(
    ... your original query ...
) t

您需要子查詢來匯總計算列。

SELECT a.*, (a.RoomNumber + a.HallNumber) AS Sum
   (SELCT  CASE 
        WHEN isnumeric(SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1)) = 1
            THEN SUBSTRING(dbo.Table.RNumber,1,CHARINDEX('+',dbo.Table.RNumber) - 1) 
        else 0 
    end AS RoomNumber,
    CASE 
        WHEN isnumeric(SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number))) = 1
            THEN SUBSTRING(dbo.Table.R.Number,CHARINDEX('+',dbo.Table.RNumber) + 1,LEN(dbo.Table.R.Number)) 
        else 0 
    end AS HallNumber) AS a

暫無
暫無

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

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