我已经提出了一个我想要完成的事情的简单示例,我想避免使用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
此查询的目标是将其置于视图中,因此不允许使用动态代码!
任何帮助将不胜感激。
答案 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