Sql Server多行合并及分组查询的例子
本文导语: 来看下面这个例子。 代码示例: --创建 test 表 ,插入数据 CREATE TABLE test(code varchar(50), [values] varchar(10),[count] int) INSERT test SELECT '001', 'aa',1 UNION ALL SELECT '001', 'bb',2 UNION ALL SELECT '002', 'aaa',4 UNION ALL SELECT '002', 'bbb',5 UNION ALL SEL...
来看下面这个例子。
--创建 test 表 ,插入数据
CREATE TABLE test(code varchar(50), [values] varchar(10),[count] int)
INSERT test SELECT '001', 'aa',1
UNION ALL SELECT '001', 'bb',2
UNION ALL SELECT '002', 'aaa',4
UNION ALL SELECT '002', 'bbb',5
UNION ALL SELECT '002', 'ccc',3;
--方法一
--将多行合并成一行,并做分组统计
SELECT code,
[values] =
stuff(b.[values].value('/R[1]', 'nvarchar(max)'),
,
,
''),[count]
FROM (SELECT code,sum([count]) as [count]
FROM test
GROUP BY code) a
CROSS apply (
SELECT [values] =(
SELECT N',' + [values] FROM test
WHERE code = a.code
FOR XML PATH(''), ROOT('R'), TYPE
)
) b;
--方法二
---SQL2005中的新解法 使用XML
SELECT code, data=STUFF((SELECT ','+[values] FROM test t WHERE code=t1.code FOR XML PATH('')), 1, 1, ''),sum([count]) as [count]
FROM test t1
GROUP BY code
--查询结果
--001 aa,bb 3
--002 aaa,bbb,ccc 12
drop table test
附1,Sql Server 分组统计并合计总数及WITH ROLLUP应用
WITH ROLLUP 在生成包含小计和合计的报表时,ROLLUP 运算符很有用。ROLLUP 运算符生成的结果集类似于 CUBE 运算符所生成的结果集。
Where OrderStatus=1 AND (CheckPayment=1 ) and TicketDate >= '2012-11-1' AND TicketDate < '2012-12-1'
GROUP BY [Source]
WITH ROLLUP Order by [Source] desc
结果集:
ZongHengV2 215
ZongHeng 3889
YixingSky 3919
YiSkyV2 901
Wanggou 1034
Uni800 1151
TaoBao 3876
ShanglvPT 897
Shanglvbao 426
Qunar 9878
PiaoMeng 429
KuXun 1549
JinRi 2661
HangTuo 140
HangLvTong 7
EasyGo 501
Aooxing 5458
AirPP 3299
yi 8677
Book 2401
19479
NULL 70787
附2,一个sql分组统计的例子
现有人口信息表,表中有字段年龄(整型),性别(字符)
要求统计不同年龄段的男女比例,形成如下表格
---------------------------
18以下
18-30
30-40
40-50
50-60
60以上
实现分组查询统计的sql实例:
from
(
select
case when 年龄=18 and 年龄=30 and 年龄=40 and 年龄=50 and 年龄=60 then '60以上'
else '其他' end end end end end as 年龄,
case when 性别='男' then 1 else 0 end as 男,
case when 性别='女' then 1 else 0 end as 女
from 人口信息表
) as T
group by T.年龄
order by T.年龄