避免带有计数和不同分组的sql中的UNION

时间:2014-11-10 15:36:43

标签: sql-server group-by union

我已经提出了一个我想要完成的事情的简单示例,我想避免使用UNION,因为:

1 - 我需要其中的9个  2 - 这会使我的查询变慢  3 - 维护会更难,忘记更改9个选项之一会更容易。

create table #temp (SA varchar(12), Area varchar(12), Style int)
insert into #temp values ('GA1','GA',2),('GA1','GA',5),('GA2','GA',6),
('GA2','GA',7),('CA1','CA',3),('CA2','CA',2)

select  area, sa, avg (style) Average, count(*) Number from #temp
group by  area, sa
Union
select  area, NULL as sa, avg (style) Average, count(*) Number from #temp
group by area

此查询的目标是将其置于视图中,因此不允许使用动态代码!

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用ROLLUP您可以获得结果。 ROLLUP生成一个结果集,显示所选列中值的层次结构的聚合。试试这个..

SELECT *
FROM   (SELECT area,
               sa,
               Avg (style) Average,
               Count(*)    Number
        FROM   #temp
        GROUP  BY rollup ( area, sa )) a
WHERE  area IS NOT NULL