统计记录
有一表,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 行)
*/