我有一张这样的桌子:
218 4 AudioVerse https://www.audioverse.org/english/podcasts/latest Latest NULL 2012-03-29 15:32:44.287
222 7 TPB http://rss.thepiratebay.se/0 Alt NULL 2012-03-31 17:55:49.223
223 7 EZTV http://www.ezrss.it/feed/ Alt NULL 2012-03-31 17:56:41.573
226 11 The Piratebay http://rss.thepiratebay.se/100 Audio Only NULL 2012-04-04 14:57:45.377
227 11 The Piratebay http://rss.thepiratebay.se/200 Video Only NULL 2012-04-04 14:58:04.650
229 15 ThePirateBay http://rss.thepiratebay.se/200 NULL 2012-04-06 22:40:12.730
230 14 The Pirate Bay http://rss.thepiratebay.se/0 NULL 2012-04-08 00:59:13.217
232 14 AudioVerse https://www.audioverse.org/english/podcasts/latest NULL 2012-04-08 01:03:22.787
233 14 EZTV http://www.ezrss.it/feed/ NULL 2012-04-08 01:20:55.860
234 17 Twit http://twit.tv/node/feed NULL 2012-04-13 18:59:23.037
235 17 Diggnation http://revision3.com/diggnation/feed/MP4-Large Video Large NULL 2012-04-13 19:01:52.817
我想要一个查询或存储过程返回一个返回不同的表,以及一个具有该 url 共同的 id 的列,(第二个 id 列 (4,7,11,15,14,17) 是 id 在问题)以逗号分隔的形式,如下所示:
http://rss.thepiratebay.se/0 3 4,5,7,7,11,11,15,14,14,14,17,17
http://rss.thepiratebay.se/200 2 4,5,7,7,11,11,15,14,14,14,17,17
http://www.ezrss.it/feed/ 2 4,5,7,7,11,11,15,14,14,14,17,17
https://www.audioverse.org/english/podcasts/latest 2 4,5,7,7,11,11,15,14,14,14,17,17
http://revision3.com/diggnation/feed/MP4-Large 1 4,5,7,7,11,11,15,14,14,14,17,17
http://twit.tv/node/feed 1 4,5,7,7,11,11,15,14,14,14,17,17
http://rss.thepiratebay.se/100 1 4,5,7,7,11,11,15,14,14,14,17,17
这里第一列是不同的 url,接下来是 url 出现的次数(与上面的主表不同,但你明白了),以及这些 url 共有的 id 的逗号分隔字符串。
在这种情况下,逗号分隔的字符串不正确。
我用来创建此表的查询是:
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr+',' ,'') + cast(userid as varchar)
FROM sites
select url, COUNT(*), (@listStr)
from sites
group by url
order by COUNT(*) desc
我正在使用 SQL Server 2008 R2。
我向您提出的问题是:如何做到这一点,哪种方式(如果有多个)最有效?
任何帮助,将不胜感激。我可以在 C# 代码中执行此操作,但我更愿意在存储过程或查询中使用它,这是最简单和/或更快的:P