我在使用group by with rollup查询一数据库时,发觉在某一时间段的结果集顺序发生了错误,这个使用with rollup语句是作为导出表与另一个表进行链接查询的,若单独使用作为导出表的语句是没有问题的,其错误的结果是那些合计行排在结果集的最前面,但是比较奇怪,有些时间段的结果集是没有问题的.
我怀疑是与另一表的链接时导致了作为导出表的结果集顺序发生了变化,请问怎样使结果集按导出表的顺序!!
------解决方案--------------------
- SQL code
DECLARE @t TABLE(Groups char(2),Item varchar(10),Color varchar(10),Quantity int)
INSERT @t SELECT 'aa','Table','Blue', 124
UNION ALL SELECT 'bb','Table','Red', -23
UNION ALL SELECT 'bb','Cup' ,'Green',-23
UNION ALL SELECT 'aa','Chair','Blue', 101
UNION ALL SELECT 'aa','Chair','Red', -90
--统计及排序
SELECT Groups=CASE
WHEN GROUPING(Color)=0 THEN Groups
WHEN GROUPING(Groups)=1 THEN '总计'
ELSE '' END,
Item=CASE
WHEN GROUPING(Color)=0 THEN Item
WHEN GROUPING(Item)=1 AND GROUPING(Groups)=0 THEN Groups+' 合计'
ELSE '' END,
Color=CASE
WHEN GROUPING(Color)=0 THEN Color
WHEN GROUPING(Color)=1 AND GROUPING(Item)=0 THEN Item+' 小计'
ELSE '' END,
Quantity=SUM(Quantity)
FROM @t
GROUP BY Groups,Item,Color WITH ROLLUP
ORDER BY GROUPING(Groups),
CASE WHEN GROUPING(Groups)=1 THEN '' ELSE Groups END DESC,
GROUPING(Item),
CASE WHEN GROUPING(Item)=1 THEN '' ELSE Item END DESC,
GROUPING(Color),
CASE WHEN GROUPING(Color)=1 THEN '' ELSE Color END DESC,
Quantity DESC
/*--结果
Groups Item Color Quantity
--------- -------------- ----------------------- -----------
bb Table Red -23
Table 小计 -23
bb Cup Green -23
Cup 小计 -23
bb 合计 -46
aa Table Blue 124
Table 小计 124
aa Chair Red -90
aa Chair Blue 101
Chair 小计 11
aa 合计 135
总计 89
--*/
------解决方案--------------------