SQL中两个计算列的总和

jas*_*son 2 sql sql-server

我正在计算两行,如下所示:

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,
Run Code Online (Sandbox Code Playgroud)

我需要创建另一个列来计算RoomNumber和HallNumber的总和,我试过这个:

SELECT *, (RoomNumber + HallNumber) AS Sum
FROM Table
Run Code Online (Sandbox Code Playgroud)

但我得到了无效的列名错误.我怎样才能得到这两列的总和?谢谢.

Tim*_*sen 5

您实际上只有两个选项,因为您无法在定义它的同一级别重用别名.您可以将两个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
Run Code Online (Sandbox Code Playgroud)

或者,您可以尝试将当前查询包装为子查询,其中您已定义的别名可用:

SELECT t.RoomNumber,
       t.HallNumber,
       (t.RoomNumber + t.HallNumber) AS Sum
FROM
(
    ... your original query ...
) t
Run Code Online (Sandbox Code Playgroud)