sql2000 问题统计表1属性 里b和c 连续出现的次数 谢谢表1名称 属性
李 b
李 b
李 b
李 c
李 b
李 b
李 c
李 c
李 b
李 b
李 b
李 b
李 c
李 b
李 c
李 b
李 c
李 c
李 c
李 c
李 b
李 b
李 b
李 b
李 c
得结果表2
名称 b c
1连 2次 4次
2连 1次 1次
3连 1次 0次
4连 2次 1次
李 b
李 b
李 b
李 c
李 b
李 b
李 c
李 c
李 b
李 b
李 b
李 b
李 c
李 b
李 c
李 b
李 c
李 c
李 c
李 c
李 b
李 b
李 b
李 b
李 c
得结果表2
名称 b c
1连 2次 4次
2连 1次 1次
3连 1次 0次
4连 2次 1次
sum(case when 属性='b' then 1 else 0 end) 'b',
sum(case when 属性='c' then 1 else 0 end) 'c'
from 表 group by 名称
-- Author : liangCK 梁爱兰
-- Comment: 小梁 爱 兰儿
-- Date : 2009-09-28 19:15:33
-------------------------------------
--> 生成测试数据: @T
DECLARE @T TABLE (名称 varchar(2),属性 varchar(1))
INSERT INTO @T
SELECT '李','b' UNION ALL
SELECT '李','b' UNION ALL
SELECT '李','b' UNION ALL
SELECT '李','c' UNION ALL
SELECT '李','b' UNION ALL
SELECT '李','b' UNION ALL
SELECT '李','c' UNION ALL
SELECT '李','c' UNION ALL
SELECT '李','b' UNION ALL
SELECT '李','b' UNION ALL
SELECT '李','b' UNION ALL
SELECT '李','b' UNION ALL
SELECT '李','c' UNION ALL
SELECT '李','b' UNION ALL
SELECT '李','c' UNION ALL
SELECT '李','b' UNION ALL
SELECT '李','c' UNION ALL
SELECT '李','c' UNION ALL
SELECT '李','c' UNION ALL
SELECT '李','c' UNION ALL
SELECT '李','b' UNION ALL
SELECT '李','b' UNION ALL
SELECT '李','b' UNION ALL
SELECT '李','b' UNION ALL
SELECT '李','c'--SQL查询如下:CREATE TABLE #tb(名称 varchar(2),属性 varchar(1),flag int);
INSERT #tb(名称,属性) SELECT 名称,属性 FROM @T;DECLARE @名称 varchar(10),@属性 varchar(10);
DECLARE @i int;
SET @i = 0UPDATE #tb SET
@i = CASE WHEN @名称 = 名称 AND @属性 = 属性 THEN @i ELSE @i+1 END,
@名称 = 名称,
@属性 = 属性,
flag = @i;
SELECT
名称 = RTRIM(rowcnt) + N'连',
SUM(CASE WHEN 属性 = 'b' THEN 1 ELSE 0 END) AS B,
SUM(CASE WHEN 属性 = 'c' THEN 1 ELSE 0 END) AS C
FROM (SELECT 名称,属性,COUNT(*) AS rowcnt FROM #tb GROUP BY 名称,属性,flag) AS A
GROUP BY rowcntDROP TABLE #tb;/*
名称 B C
------------- ----------- -----------
1连 2 4
2连 1 1
3连 1 0
4连 2 1(4 行受影响)
*/
SQLServer2005DECLARE @T TABLE (名称 VARCHAR(2),属性 VARCHAR(1))
INSERT INTO @T
SELECT '李','B' UNION ALL
SELECT '李','B' UNION ALL
SELECT '李','B' UNION ALL
SELECT '李','C' UNION ALL
SELECT '李','B' UNION ALL
SELECT '李','B' UNION ALL
SELECT '李','C' UNION ALL
SELECT '李','C' UNION ALL
SELECT '李','B' UNION ALL
SELECT '李','B' UNION ALL
SELECT '李','B' UNION ALL
SELECT '李','B' UNION ALL
SELECT '李','C' UNION ALL
SELECT '李','B' UNION ALL
SELECT '李','C' UNION ALL
SELECT '李','B' UNION ALL
SELECT '李','C' UNION ALL
SELECT '李','C' UNION ALL
SELECT '李','C' UNION ALL
SELECT '李','C' UNION ALL
SELECT '李','B' UNION ALL
SELECT '李','B' UNION ALL
SELECT '李','B' UNION ALL
SELECT '李','B' UNION ALL
SELECT '李','C';
WITH T AS
(SELECT 属性
,(ROW_NUMBER() OVER(ORDER BY GETDATE()))IDX1
FROM @T
),
T2 AS
(SELECT 属性
,(IDX1-(ROW_NUMBER()OVER(PARTITION BY 属性 ORDER BY IDX1))) IDX
FROM T
),
T3 AS
(
SELECT 属性,COUNT(*) CNT
FROM T2
GROUP BY 属性,IDX
)
SELECT
名称 = RTRIM(CNT) + N'连',
SUM(CASE WHEN 属性 = 'B' THEN 1 ELSE 0 END) AS B,
SUM(CASE WHEN 属性 = 'C' THEN 1 ELSE 0 END) AS C
FROM T3
GROUP BY CNT名称 B C
------------- ----------- -----------
1连 2 4
2连 1 1
3连 1 0
4连 2 1(4 行)