--先用这个分拆,然后select col , count(*) from (...) t group by col/* 标题:分拆列值1 作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开) 时间:2008-11-20 地点:广东深圳 描述有表tb, 如下: id value ----------- ----------- 1 aa,bb 2 aaa,bbb,ccc 欲按id,分拆value列, 分拆后结果如下: id value ----------- -------- 1 aa 1 bb 2 aaa 2 bbb 2 ccc */--1. 旧的解决方法(sql server 2000) SELECT TOP 8000 id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns b SELECT A.id, SUBSTRING(A.[values], B.id, CHARINDEX(',', A.[values] + ',', B.id) - B.id) FROM tb A, # B WHERE SUBSTRING(',' + A.[values], B.id, 1) = ','DROP TABLE #--2. 新的解决方法(sql server 2005) create table tb(id int,value varchar(30)) insert into tb values(1,'aa,bb') insert into tb values(2,'aaa,bbb,ccc') go SELECT A.id, B.value FROM( SELECT id, [value] = CONVERT(xml,'<root><v>' + REPLACE([value], ',', '</v><v>') + '</v></root>') FROM tb )A OUTER APPLY( SELECT value = N.v.value('.', 'varchar(100)') FROM A.[value].nodes('/root/v') N(v) )BDROP TABLE tb/* id value ----------- ------------------------------ 1 aa 1 bb 2 aaa 2 bbb 2 ccc(5 行受影响) */
标题:分拆列值1
作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
时间:2008-11-20
地点:广东深圳
描述有表tb, 如下:
id value
----------- -----------
1 aa,bb
2 aaa,bbb,ccc
欲按id,分拆value列, 分拆后结果如下:
id value
----------- --------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
*/--1. 旧的解决方法(sql server 2000)
SELECT TOP 8000 id = IDENTITY(int, 1, 1) INTO # FROM syscolumns a, syscolumns b SELECT A.id, SUBSTRING(A.[values], B.id, CHARINDEX(',', A.[values] + ',', B.id) - B.id)
FROM tb A, # B
WHERE SUBSTRING(',' + A.[values], B.id, 1) = ','DROP TABLE #--2. 新的解决方法(sql server 2005)
create table tb(id int,value varchar(30))
insert into tb values(1,'aa,bb')
insert into tb values(2,'aaa,bbb,ccc')
go
SELECT A.id, B.value
FROM(
SELECT id, [value] = CONVERT(xml,'<root><v>' + REPLACE([value], ',', '</v><v>') + '</v></root>') FROM tb
)A
OUTER APPLY(
SELECT value = N.v.value('.', 'varchar(100)') FROM A.[value].nodes('/root/v') N(v)
)BDROP TABLE tb/*
id value
----------- ------------------------------
1 aa
1 bb
2 aaa
2 bbb
2 ccc(5 行受影响)
*/
寫個存儲過程吧!
没一个记录,在AllElectronics 表里面出现的次数吗? 那这样我就得扫描2次数据库了
insert AllElectronics select 'T100','I1,I2,I5'
insert AllElectronics select 'T200','I2,I4'
insert AllElectronics select 'T300','I2,I3'
insert AllElectronics select 'T400','I1,I2,I4'
insert AllElectronics select 'T500','I1,I3'
insert AllElectronics select 'T600','I2,I3'
insert AllElectronics select 'T700','I1,I3'
insert AllElectronics select 'T800','I1,I2,I3,I5'
insert AllElectronics select 'T900','I1,I2,I3'select * into # from AllElectronics
alter table # alter column [List of item_ID's] varchar(8000)
declare @s varchar(8000)
update # set [List of item_ID's]=@s,@s=isnull(@s+',','')+[List of item_ID's]
select substring(t.a,charindex(',',','+t.a,number),charindex(',',t.a+',',number)-charindex(',',','+t.a,number)) a,count(1) cnt
from master..spt_values ,(select max([List of item_ID's]) a from #) t
where type='p' and number>0
and charindex(',',','+t.a,number)>0
and charindex(',',','+t.a,number)< charindex(',',t.a+',',number)
group by substring(t.a,charindex(',',','+t.a,number),charindex(',',t.a+',',number)-charindex(',',','+t.a,number))drop table #,AllElectronics
/*
a cnt
---- ----
I1 6
I2 7
I3 6
I4 2
I5 2
(5 行受影响)
*/