我有以下分组表达式
group by a, c, (case when a='F' then b else '-1' end)
抱歉,我的查询中有一个拼写错误,真的查询不一样,在程序中我还没有得到它,现在一切都是正确的。
答案 0 :(得分:0)
您的查询按 b
进行分组,因为您在b
子句中列出了 GROUP BY
列:
GROUP BY a, b, c, CASE WHEN a='F' THEN b ELSE '-1' END
^
删除该列引用,并将其替换为CASE表达式,例如:
GROUP BY a, CASE WHEN a='F' THEN b ELSE '-1' END, c
答案 1 :(得分:0)
如果您在某些情况下只想group by
b
,请不要在b
中加入group by
。代替:
group by a, c, (case when a = 'F' then b end)
我会完全忽略else
子句,但如果b
为NULL
,这可能会让人感到困惑。如果您可以找到b
永不占用的值,则可以在group by
中添加该值。否则,您可以向逻辑中添加其他组件:
group by a, c,
(case when a = 'F' then b end),
(case when a = 'F' and b is null then 1 else 2 end)
当然,这会产生两个NULL
行,一个用于真实NULL
,一个用于非匹配。您可以在select
。