Sql 扎布尔。 Table1 - ID---Tags 1---tag1,tag2,tag3,tag6 2---tag2,tag4,tag5 3---tag3,tag8,tag9,tag10 4---tag1,tag2,tag6 5---tag1,tag4,ta
扎布尔。Sql 扎布尔。 Table1 - ID---Tags 1---tag1,tag2,tag3,tag6 2---tag2,tag4,tag5 3---tag3,tag8,tag9,tag10 4---tag1,tag2,tag6 5---tag1,tag4,ta,sql,sql-server-2008,join,concatenation,partial,Sql,Sql Server 2008,Join,Concatenation,Partial,扎布尔。 Table1 - ID---Tags 1---tag1,tag2,tag3,tag6 2---tag2,tag4,tag5 3---tag3,tag8,tag9,tag10 4---tag1,tag2,tag6 5---tag1,tag4,tag5 Table2 - tagname---taglabel tag1--- Nice Name Tag1 tag2--- Nice Name Tag2 tag3--- Nice Name Tag3 tag4--- Nice Name Ta
Table1 -
ID---Tags
1---tag1,tag2,tag3,tag6
2---tag2,tag4,tag5
3---tag3,tag8,tag9,tag10
4---tag1,tag2,tag6
5---tag1,tag4,tag5
Table2 -
tagname---taglabel
tag1--- Nice Name Tag1
tag2--- Nice Name Tag2
tag3--- Nice Name Tag3
tag4--- Nice Name Tag4
tag5--- Nice Name Tag5
tag6--- Nice Name Tag6
tag7--- Nice Name Tag7
tag8--- Nice Name Tag8
tag9--- Nice Name Tag9
tag10--- Nice Name Tag10
ID---TagsNames
1---Nice Name Tag1,Nice Name Tag2,Nice Name Tag3,Nice Name Tag6
2---Nice Name Tag2,Nice Name Tag4,Nice Name Tag5
3---Nice Name Tag3,Nice Name Tag8,Nice Name Tag9,Nice Name Tag10
4---Nice Name Tag1,Nice Name Tag2,Nice Name Tag6
5---Nice Name Tag1,Nice Name Tag4,Nice Name Tag5
SELECT gt.id as g
,gt.tags as tg
,tt.HitTagName as ht
,tt.termlabel as tl
FROM tblidtags gt (nolock)
JOIN tbltaglabels tt (Nolock) ON gt.tg like '%' + tt.ht + '%'
WITH tmp (id, tag, tags) AS (
SELECT id, LEFT(tags, CHARINDEX(',',tags+',')-1),
STUFF(tags, 1, CHARINDEX(',',tags+','), '')
FROM tbl1
UNION ALL
SELECT id, LEFT(tags, CHARINDEX(',',tags+',')-1),
STUFF(tags, 1, CHARINDEX(',',tags+','), '')
FROM tmp
WHERE tag > ''
)
SELECT id,
STUFF((SELECT ',' + tbl2.descr FROM tmp INNER JOIN tbl2 ON (tmp.tag = tbl2.tag)
WHERE id = a.id
FOR XML PATH ('')), 1, 1, '') tag_names
FROM tmp a
WHERE tag != ''
GROUP BY id
ORDER BY id;
;WITH cte AS (
SELECT a.ID, b.taglabel FROM
(SELECT c.ID, Split.a.value('.', 'VARCHAR(100)') AS Tags FROM
(SELECT ID, CAST('<M>' + REPLACE(Tags, ',' , '</M><M>') + '</M>' AS XML) AS Tag
FROM dbo.Table1) c
CROSS APPLY Tag.nodes('/M') Split(a)) a
LEFT JOIN dbo.Table2 b ON b.tagname = a.Tags)
SELECT ID, STUFF(
(SELECT DISTINCT ',' + NULLIF(taglabel,'') FROM cte t2
WHERE t1.id = t2.id FOR XML PATH(''), TYPE).value('.','VARCHAR(MAX)'),1,2,'') AS tags
FROM cte t1 GROUP BY ID ORDER BY ID
CREATE TABLE dbo.Table1 (
ID tinyint PRIMARY KEY,
Tags varchar(25))
CREATE TABLE dbo.Table2(
tagname varchar(5) PRIMARY KEY,
taglabel varchar(15))
INSERT INTO dbo.Table1 VALUES
(1, 'tag1,tag2,tag3,tag6'),
(2, 'tag2,tag4,tag5'),
(3, 'tag3,tag8,tag9,tag10'),
(4, 'tag1,tag2,tag6'),
(5, 'tag1,tag4,tag5')
INSERT INTO dbo.Table2 VALUES
('tag1', 'Nice Name Tag1'),
('tag2', 'Nice Name Tag2'),
('tag3', 'Nice Name Tag3'),
('tag4', 'Nice Name Tag4'),
('tag5', 'Nice Name Tag5'),
('tag6', 'Nice Name Tag6'),
('tag7', 'Nice Name Tag7'),
('tag8', 'Nice Name Tag8'),
('tag9', 'Nice Name Tag9'),
('tag10', 'Nice Name Tag10')
ID tags
---- ------------------------------------------------------------------
1 Nice Name Tag1,Nice Name Tag2,Nice Name Tag3,Nice Name Tag6
2 Nice Name Tag2,Nice Name Tag4,Nice Name Tag5
3 Nice Name Tag10,Nice Name Tag3,Nice Name Tag8,Nice Name Tag9
4 Nice Name Tag1,Nice Name Tag2,Nice Name Tag6
5 Nice Name Tag1,Nice Name Tag4,Nice Name Tag5
CREATE TABLE tags (
id mediumint,
tag varchar(5),
PRIMARY KEY (id, tag))
INSERT INTO tags (id, tag) VALUES
SELECT c.ID, Split.a.value('.', 'VARCHAR(100)') AS Tags FROM
(SELECT ID, CAST('<M>' + REPLACE(Tags, ',' , '</M><M>') + '</M>' AS XML) AS Tag
FROM dbo.Table1) c
CROSS APPLY Tag.nodes('/M') Split(a)