日期:2014-05-17  浏览次数:20449 次

sql分拆记录的问题
有一张表里面有个外键,根据这个外键分组得到每个对应的总数,但是现在这个表调整结构了,这个外键改成了可以存多个值,用逗号隔开的那种,请问如何用最少的改动统计出每个对应的总数。
以前的sql语句:
SELECT Receiver, IntentionCarType, COUNT(1) AS number FROM Flow 
GROUP BY Receiver, IntentionCarType  
现在IntentionCarType 可以存多个值逗号隔开,请大家给点提示,谢谢。


------解决方案--------------------
SQL code
给你看个查分的例子

if not object_id('Tab') is null
    drop table Tab
Go
Create table Tab([Col1] int,[COl2] nvarchar(5))
Insert Tab
select 1,N'a,b,c' union all
select 2,N'd,e' union all
select 3,N'f'
GO

--sql2005 或更高版本
SELECT  a.COl1 , Col2 = T.c.value('.' , 'nvarchar(100)')
FROM    (
         SELECT Col1 , Col2= CONVERT( XML, '<v>'+ REPLACE (COl2 , ',' , '</v><v>')+ '</v>') FROM Tab
        ) a
CROSS APPLY a.Col2.nodes('/v/text()') T (c)
/*
COl1    Col2
1    a
1    b
1    c
2    d
2    e
3    f
*/