我正在计算两行,如下所示:
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)
但我得到了无效的列名错误.我怎样才能得到这两列的总和?谢谢.
您实际上只有两个选项,因为您无法在定义它的同一级别重用别名.您可以将两个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)