SQL分组与另一列的逻辑检查?

时间:2015-03-20 21:04:38

标签: sql sql-server

假设我有下表:

id    param    result
1     AAA      TRUE
1     AAA      FALSE
1     AAA      FALSE
1     BBB      TRUE
1     CCC      TRUE
2     AAA      TRUE
2     CCC      TRUE
3     AAA      FALSE
3     AAA      FALSE
3     AAA      FALSE
3     CCC      TRUE
3     BBB      TRUE

是否可以通过[param]列进行分组,以便如果任何相应的结果为TRUE,则[result]将显示为TRUE,如果没有为TRUE,则显示为FALSE?以下是我的目标示例:

id    param    result
1     AAA      TRUE
1     BBB      TRUE
1     CCC      TRUE
2     AAA      TRUE
2     CCC      TRUE
3     AAA      FALSE
3     CCC      TRUE
3     BBB      TRUE    

1 个答案:

答案 0 :(得分:2)

这是一个可行的代码草图。您只需要为result添加正确的常量:

select id, param,
       (case when sum(case when result = TRUE then 1 else 0 end) > 0
             then TRUE else FALSE
        end)
from table t
group by id, param;

SQL Server没有本机布尔类型,并且不理解" true"和"假"。对于某些表示形式(例如'TRUE''FALSE'),以下内容将起作用:

select id, param, max(result) as result
from table t
group by id, param;