Ari*_*ian 5 sql sql-server sql-server-2008
我有一个表存储状态的多个项目,我想根据具体情况计算每个状态.我写了这个查询:
SELECT
State_ID,
State_Name,
State_All= CASE WHEN type1=1 AND type2=1 THEN COUNT(Id) END
State_w= CASE WHEN type1=2 AND type2=1 THEN COUNT(Id) END
State_s= CASE WHEN type1=2 AND type2=2 THEN COUNT(Id) END
FROM
tblStates
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
Column 'State_ID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Run Code Online (Sandbox Code Playgroud)
当我GROUP BY
为State_ID 添加了子句时,我再次为State_Name获得了上述错误,并且当将State_Name添加到GROUP BY
子句时,我收到了State_All,State_w,State_s的错误.
我的表中没有名为State_All,State_w,State_s的列.
如何在不使用的情况下根据具体情况计算CURSORS
?
gbn*_*gbn 11
你是在正确的道路上.
你把条件放在COUNT里面就像这样.COUNT忽略NULL(这是CASE中隐含的ELSE),因此您只计算真正的匹配.你也需要GROUP BY.
您的错误来自在COUNT之外使用type1和type2
SELECT
State_ID,
State_Name,
State_All = COUNT(CASE WHEN type1=1 AND type2=1 THEN 1 END),
State_w = COUNT(CASE WHEN type1=2 AND type2=1 THEN 1 END),
State_s = COUNT(CASE WHEN type1=2 AND type2=2 THEN 1 END)
FROM
tblStates
GROUP BY
State_ID, State_Name
Run Code Online (Sandbox Code Playgroud)
这能解决它吗?
SELECT
State_ID,
State_Name,
CASE WHEN type1=1 AND type2=1 THEN COUNT(Id) END AS State_All,
CASE WHEN type1=2 AND type2=1 THEN COUNT(Id) END AS State_w,
CASE WHEN type1=2 AND type2=2 THEN COUNT(Id) END AS State_s
FROM
tblStates
GROUP BY State_ID, State_Name
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22267 次 |
最近记录: |