从mssql列,regex,group by中搜索字符串值

时间:2014-03-07 03:02:42

标签: sql sql-server regex

这些数据:

ID     Desc
1      CUSTSEG
2      CUSTSEG;CARDMNU;CRC;CRCBISOA;CARDMNU;CRC;CRCBISOA
3      CUSTSEG;HKM
4      CUSTSEG;HKM;HKM
5      CUSTSEG;HKM;HKM;HKM;HKM;HKM;HKM;HKM
6      CUSTSEG;PHPM
7      CUSTSEG;PHPM;CARDMNU
8      CUSTSEG;PHPM;CARDMNU;ATM

必须以这种格式查询:

COUNT  Desc
1      ATM
4      CARDMNU
2      CRC
2      CRCBISOA
8      CUSTSEG
10     HKM
3      PHPM

我怎样才能实现这个目标?子?我试过这个:

SELECT COUNT(*), CallTraversalLog
FROM [IVR].[dbo].[tblReportData] 
WHERE CallTraversalLog Like '%CUSTSEG%'
GROUP BY CallTraversalLog

但我得到的结果是

COUNT    Desc
1        CUSTSEG;PHPM;CARDMNU;CRC;ATM
1        CUSTSEG;PHPM;CARDMNU;CRC;CARDMNU;CRC
1        CUSTSEG;PHPM;CARDMNU;CRC;CARDMNU;CRC;CRCBISOA
2        CUSTSEG;PHPM;CARDMNU;CRC;CC
3        CUSTSEG;PHPM;CARDMNU;CRC;CRC
2        CUSTSEG;PHPM;CARDMNU;CRC;CRC;CARDMNU;CRC
1        CUSTSEG;PHPM;CARDMNU;CRC;CRC;CRC;CRC;CARDMNU;CRC
25       CUSTSEG;PHPM;CARDMNU;CRC;CRCACTIVATION
4        CUSTSEG;PHPM;CARDMNU;CRC;CRCACTIVATION;CRCENROLL
55       CUSTSEG;PHPM;CARDMNU;CRC;CRCAPST

1 个答案:

答案 0 :(得分:0)

我会拆分字符串并计算项目。您需要一个表值函数,它通过分隔符拆分字符串。如果您不想编写自己的功能,可以轻松谷歌一个。然后将CROSS APPLY函数添加到您的表中并计算项目。

SELECT s.item, count(*)
FROM [IVR].[dbo].[tblReportData] d
CROSS APPLY dbo.fnSplitString(d.CallTraversalLog, ';') s
GROUP BY s.item