有没有办法在查询中应用或不应用组?例如,我有这个:
Col1 Col2 Col3
A 10 X
A 10 NULL
B 12 NULL
B 12 NULL
只有当我在Col3中有值时才需要按Col1和Col2进行分组,如果Col3为空,我不需要对它进行分组。结果应该是:
Col1 Col2
A 20
B 12
B 12
也许不是一个优雅的例子,但这就是这个想法。 谢谢。
答案 0 :(得分:0)
当col3不为null时,听起来你想要col1的所有唯一值。否则,您需要col1的所有值。
假设您有一个支持窗口函数的SQL引擎,您可以这样做:
select col1, sum(col2)
from (select t.*,
count(col3) over (partition by col1) as NumCol3Values,
row_number() over (partition by col1 order by col1) as seqnum
from t
) t
group by col1,
(case when NumCol3Values > 1 then NULL else seqnum end)
逻辑就像你说的那样。如果存在任何非NULL值,则组的第二个子句总是计算为NULL - 所有内容都在同一个组中。如果全部为NULL,则子句计算为序列号,该值将每个值放在一个单独的行上。
没有窗口功能,这有点困难。如果我假设第3列的最小值(非NULL时)是唯一的,那么以下内容将起作用:
select t.col1,
(case when minCol3 is null then tsum.col2 else t.col2 end) as col2
from t left outer join
(select col1, sum(col2) as col2,
min(col3) as minCol3
from t
) tsum
on t.col1 = tsum.col1
where minCol3 is NULL or t.col3 = MinCol3
答案 1 :(得分:0)
re:有没有办法在查询中应用或不应用组? 不是直接的,但你可以通过分组将其分解,然后将结果联合起来。
这有用吗?
Select col1, sum(col2)
from table
group by col1, col2
having max(col3) is not null
union all
select col1, col2
from table t left outer join
(Select col1, col2
from table
group by col1, col2
having max(col3) is not null) g
where g.col1 is null
答案 2 :(得分:0)
这是一个符合你想要的SQL小提琴: http://sqlfiddle.com/#!3/b7f07/2
这是SQL本身:
SELECT col1, sum(col2) as col2 FROM dataTable WHERE
col1 in (SELECT col1 from dataTable WHERE col3 IS NOT NULL)
GROUP BY col1
UNION ALL
SELECT col1, col2 FROM dataTable WHERE
(col1 not in
(SELECT col1 from dataTable WHERE col3 IS NOT NULL and col1 is not null))