SQL - 为每个用户计算匹配TEXT的项的实例

时间:2013-10-25 17:22:02

标签: sql tsql

我有一个这样格式化的数据集:

ID  URL
1   google.com/trees
1   Wikipedia.com
1   Wikipedia.com/trees
2   Hello.com
2   Yahoo.com
3   Wikipedia.com
3   Google.com
3   MSN.com

我想创建一个表格(一个实际的数据集,而不仅仅是输出窗口中的一个表格),格式是这样的,它基本上总结了对每个域的访问。

ID  Wikipedia.com   Google.com  Hello.com   Yahoo.com   MSN.com
1   2               1           0           0           0
2   0               0           1           1           0
3   1               1           0           0           1

感谢所有帮助。感谢。

1 个答案:

答案 0 :(得分:1)

这适用于mssql版本2008

declare @yourtable table(id int, URL varchar(20))
insert @yourtable values(1, 'google.com/trees')
insert @yourtable values(1, 'Wikipedia.com')
insert @yourtable values(1, 'Wikipedia.com/trees')
insert @yourtable values(2, 'Hello.com')

declare @shorturltable table(URL varchar(20))
insert @shorturltable values
('Wikipedia.com'),('Google.com'),('Hello.com'),('Yahoo.com'),('MSN.com')


;with t as(
 SELECT 1 a, y.id, su.URL 
 FROM @yourtable y
 JOIN @shorturltable su
 ON y.URL like '%' + su.URL + '%'
) 
SELECT id, [Wikipedia.com],[Google.com],[Hello.com],[Yahoo.com],[MSN.com]
FROM t
PIVOT (count(a) FOR [URL] IN ([Wikipedia.com],[Google.com],[Hello.com],[Yahoo.com],[MSN.com])) AS pvt

Link to test