带有聚合函数的SQL Case语句

时间:2014-04-09 20:17:33

标签: sql sql-server

我正在尝试执行一个案例陈述,如果特定项目的所有记录都包含所有团队的特定值,那么项目将被归类为我认为合适的方式。

的内容
case when (COUNT(team_Name) = (SUM(status = 'Completed')) then 'Complete'
case when (COUNT(team_Name) = (SUM(status = 'On Hold')) then 'On hold'
case when (COUNT(team_Name) = (SUM(status = 'Pending')) then 'Pending'
else 'In Progress' end

所以我试图获得(status =' Completed')的总和,我认为这是一个匹配team_names计数的布尔语句。我的思维过程是,如果团队名称的数量和“完成”的数量是多少。状态相同,然后项目将被视为完成'。

所以选择分组是Project - >团队 - >状态 - >案件陈述的结果。我想在连接中使用上面的case语句,因此case语句在项目级别上产生聚合或沿着这些行的某些东西。

但是,我的语法似乎与上面的语句略有不同,我无法通过此方式运行查询。我在' ='附近收到错误的语法错误。对于(状态='已完成')方。

这在SQL中是否可行,或者是否需要更改。

2 个答案:

答案 0 :(得分:2)

试试这个:

case COUNT(team_Name) 
    when SUM(CASE WHEN status = 'Completed' THEN 1 END) then 'Complete'
    when SUM(CASE WHEN status = 'On Hold' THEN 1 END)   then 'On Hold'
    when SUM(CASE WHEN status = 'Pending' THEN 1 END)   then 'Pending'
       else 'Abandoned' end

答案 1 :(得分:0)

您可以使用Decode Function实现此功能。它像IF-THEN-ELSE条件一样工作。

给你一个例子:

Select YourFieldAliasName =
CASE TEAM_ID
    WHEN 'Completed' THEN 'Complete'
WHEN 'On Hold' THEN 'Complete'
WHEN 'Pending' THEN 'Pending'
    ELSE 'Abandoned'
END

如果所有其他条件都失败,则抛弃其他情况。