问题描述
我正在尝试计算此查询中的多列
SELECT
SUM (CASE WHEN B.ID = 1 THEN 1 END) AS OPD,SUM (CASE WHEN B.ID = 2 THEN 1 END) AS IPD,SUM (CASE WHEN B.ID = 3 THEN 1 END) AS DC,SUM (CASE WHEN B.ID = 4 THEN 1 END) AS PROC,SUM (CASE WHEN B.ID = 5 THEN 1 END) AS SUR,(OPD + IPD + PROC) as Total
FROM REF_TB_APP_TRANSACTIONS A,REF_VW_VISIT_TYPE B
WHERE A.REQ_VISIT_TYPE = B.ID
AND A.TO_EST_CODE = 20068;
但我收到此错误 PROC invalid identifier
解决方法
您不能直接在 SUMS
的 Total
列中添加三个 SELECT
,因为您使用的是这些列的别名。你可以用另一个 Total
来做你的 SUM CASE
列。
SELECT
SUM (CASE WHEN B.ID = 1 THEN 1 END) AS OPD,SUM (CASE WHEN B.ID = 2 THEN 1 END) AS IPD,SUM (CASE WHEN B.ID = 3 THEN 1 END) AS DC,SUM (CASE WHEN B.ID = 4 THEN 1 END) AS [PROC],SUM (CASE WHEN B.ID = 5 THEN 1 END) AS SUR,SUM (CASE WHEN B.ID IN (1,2,4)THEN 1 END) AS Total
FROM REF_TB_APP_TRANSACTIONS A,REF_VW_VISIT_TYPE B
WHERE A.REQ_VISIT_TYPE = B.ID
AND A.TO_EST_CODE = 20068;
,
取决于您使用的 DBMS。您不能对这样别名的列求和,您必须使用子选择并从那里进行求和。如果您验证您的 DBMS,我们可以创建查询。
如果是 MS SQL,下面的就可以了。一些事情:
PROC 是保留字,所以要么改变它,要么在它周围加上括号(我选择了括号)。此外,如果您使用 JOINS 与您查询的方式相比,则更可取。
SELECT OPD,IPD,DC,[PROC],SUR,(OPD + IPD + [PROC]) as Total
FROM (
SELECT
SUM (CASE WHEN B.ID = 1 THEN 1 END) AS OPD,SUM (CASE WHEN B.ID = 5 THEN 1 END) AS SUR
FROM REF_TB_APP_TRANSACTIONS A
INNER JOIN REF_VW_VISIT_TYPE B ON A.REQ_VISIT_TYPE = B.ID
WHERE A.TO_EST_CODE = 20068
) SUB
,
您不能将别名列作为 select
的一部分引用,因为按照查询执行的顺序,它们尚不存在。
您只需将查询包装起来,使其成为 derived table
,然后您可以在外部 select
中引用它们,请参阅:
select OPD,OPD + IPD + [PROC] as Total from (
SELECT
SUM (CASE WHEN B.ID = 1 THEN 1 END) AS OPD,SUM (CASE WHEN B.ID = 2 THEN 1 END) AS IPD,SUM (CASE WHEN B.ID = 3 THEN 1 END) AS DC,SUM (CASE WHEN B.ID = 4 THEN 1 END) AS [PROC],SUM (CASE WHEN B.ID = 5 THEN 1 END) AS SUR
FROM REF_TB_APP_TRANSACTIONS A
join REF_VW_VISIT_TYPE B on B.ID=A.REQ_VISIT_TYPE
where A.TO_EST_CODE = 20068
)x
猜测是因为你有一个分号,这是 SQLServer,在这种情况下,你需要在保留字 []
周围使用 PROC
我也正确地 joined
你的表,因为它不再是 1989 年了 :-0