日期:2014-05-19  浏览次数:20495 次

统计记录
有一表,id,title,key,time,...   其中key字段存入的数据为“aa,bb,cc”“aa,bb”“aa”“bb“ “a,b,c,cc”......数据用逗号隔开
 要求统计key字段中所有数据,重复数据统计重复次数。

最终统计列表为:aa     3
                                bb     3
                                cc     2
                                a       1
                                ......
用什么方法可以简单的实现,多谢

------解决方案--------------------
if object_id( 'pubs..A ') is not null
drop table A
go

create table A(id int,[key] varchar(20))
insert into A(id,[key]) values(1, 'aa,bb,cc ')
insert into A(id,[key]) values(2, 'aa,bb ')
insert into A(id,[key]) values(3, 'aa ')
insert into A(id,[key]) values(4, 'bb ')
insert into A(id,[key]) values(5, 'a,b,c,cc ')
go
-- 建立一个辅助的临时表就可以了
SELECT TOP 8000 id = identity(int,1,1)
INTO # FROM syscolumns a, syscolumns b

select [key] , count(*) as 数量 from
(
SELECT
A.ID,
[key] = SUBSTRING(A.[key], B.ID, CHARINDEX( ', ', A.[key] + ', ', B.ID) - B.ID)
FROM A, # B
WHERE SUBSTRING( ', ' + a.[key], B.id, 1) = ', '
) t
group by [key]
order by [key]
GO

drop table A,#
/*
key 数量
-------------------- -----------
a 1
aa 3
b 1
bb 3
c 1
cc 2

(所影响的行数为 6 行)
*/