Sql 在hibernate中按两列条件分组

Sql 在hibernate中按两列条件分组,sql,oracle,hibernate,group-by,Sql,Oracle,Hibernate,Group By,我想在两列上分组。如果b不为空,我想得到a和b组成的c组的总数;如果b为空,我想得到a组成的c组的总数 我编写了这个查询,但在b为null的情况下它不起作用!查询结果为b不为空的所有行 select m.s.a , case when (m.l is not null) then m.l.code end , coalesce(sum(m.c),0 ) from material m where m.Item.id =:itemId group by m.s.a, case w

我想在两列上分组。如果b不为空,我想得到a和b组成的c组的总数;如果b为空,我想得到a组成的c组的总数 我编写了这个查询,但在b为null的情况下它不起作用!查询结果为b不为空的所有行

select  m.s.a ,
case when (m.l is not  null)  
then  m.l.code end , coalesce(sum(m.c),0  ) 
from material m where m.Item.id =:itemId 
group by m.s.a, case 
when (m.l is not null)  
then m.l.code end


+--+----+-------+---+
|  | s  | l     | c |
+--+----+-------+---+
|  |  a | d     |  1 |
|  |  a | d     |  9 |
|  |  a | e     |  3 |
|  |  a | f     |  4 |
|  |  c | g     |  5 |
|  |  c | g     |  6 |
|  |  c | h     | 20 |
|  |  d | null  |  7 |
|  |  d | null  |  8 |
预期结果:

+--+----+-------+---+
|  | s  | l     | c |
+--+----+-------+---+
|  |  a | d     | 10 |
|  |  a | e     |  3 |
|  |  a | f     |  4 |
|  |  c | g     | 11 |
|  |  c | h     | 20 |
|  |  d |       | 15 |

默认情况下,oracle/postgres/mysql将生成预期的输出

SELECT s,l,sum(c)
FROM temp
GROUP BY s,l;
如果不想按空值分组,可以使用
UNION

SELECT s,l,sum(c)
FROM temp
WHERE l is NOT NULL
GROUP BY s,l
UNION
SELECT s,l,sum(c)
FROM temp
WHERE l is NULL;

默认情况下,oracle/postgres/mysql将生成预期的输出

SELECT s,l,sum(c)
FROM temp
GROUP BY s,l;
如果不想按空值分组,可以使用
UNION

SELECT s,l,sum(c)
FROM temp
WHERE l is NOT NULL
GROUP BY s,l
UNION
SELECT s,l,sum(c)
FROM temp
WHERE l is NULL;

你的问题没有多大意义。请在问题中添加一些示例数据和预期输出以澄清。@gurvindersingh在我编辑的文章中添加示例数据和预期输出您的问题没有多大意义。请在问题中添加一些示例数据和预期输出以澄清。@Gurvindersingh在编辑我的文章并添加示例数据和预期输出中我尝试了第一次查询,得到了与上面相同的结果!你能分享这个样本数据集吗?我尝试了第一个查询,得到了与上面相同的结果!你能分享这个样本数据集吗?