Условный накопительный пакет SQL Server (только при наличии нескольких подгрупп) - PullRequest
1 голос
/ 15 июля 2011

У меня есть следующий SQL.Большинство G1 и G2 являются отношениями один-к-одному.Некоторые отношения один-ко-многим.Следующий SQL-код покажет слишком много « Total2 ».Можно ли удалить эти Total2 строки, когда G1 и G2 один в один?

1 Ответ

1 голос
/ 15 августа 2011

к сожалению, я понятия не имею, как избежать подзапроса здесь

С подзапросом мы можем использовать один трюк - когда мы группируем по G1 и в то же время G1 и G2 имеют отношение 1 к 1 (т.е.равно) это означает, что max (G2) будет равно min (g2), и это условие позволит нам построить предложение where и избавиться от них

Код может быть таким:

select * from
(
SELECT  CASE 
WHEN GROUPING_ID(G1) = 1 THEN 'Total1' ELSE G1 END as G1,    
MIN(g2) as min_g2, 
max(g2) as max_g2,
CASE WHEN GROUPING_ID(G2) = 1 THEN 'Total2' ELSE G2 END as G2,  
       SUM(a) as SUM_A,       
         SUM(b) as SUM_B,       
           count(*) as cnt
FROM    data 
GROUP BY         G1, G2 
WITH ROLLUP 
) t
where 
not (min_g2 = max_g2 and g2 = 'Total2')
...