SQL Server 2008中的案例和计数

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)


JT *_*ner 2

这能解决它吗?

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)