我有ques
表:
我有用户定义的split
功能:
Select * from split('1,2,3,4')
通过拆分字符串
以表格格式返回数据
我想在ques
表上使用split函数编写select查询以获取如下数据:
id | ques | tags
-----------------
1 | abc | 1
2 | def | 1
2 | def | 2
3 | ghi | 2
4 | jkl | 3
4 | jkl | 4
任何人都可以帮助我加入吗?
答案 0 :(得分:4)
您需要numbers table来有效地解析以逗号分隔的字符串。您可以在交叉应用于表的子查询中执行此操作:
select *
from ques
cross apply (
select substring(tags, n, charindex(',', tags + ',', n) - n)
from numbers
where substring(',' + tags, n, 1) = ','
and n < len(tags) + 1
) x (c)
答案 1 :(得分:0)
迪恩先生的方法非常有创意,但我认为你可以通过使用与CROSS APPLY
一起使用的相同分割功能来保持简单,见下文:
测试数据
DECLARE @TABLE TABLE (ID INT, ques VARCHAR(10), Tags VARCHAR(20))
INSERT INTO @TABLE VALUES
(1 , 'ABC', '1'),(2 , 'Def', '1,2'),(3 , 'ghi', '2'),
(4 , 'jkl', '3,4'),(5 , 'mno', '4,5')
<强>查询强>
SELECT t.ID, t.ques, C.items AS Tags
FROM @TABLE t
CROSS APPLY (SELECT * FROM dbo.Split(t.Tags, ',')) C
结果集
╔════╦══════╦═══════╗
║ ID ║ ques ║ Tags ║
╠════╬══════╬═══════╣
║ 1 ║ ABC ║ 1 ║
║ 2 ║ Def ║ 1 ║
║ 2 ║ Def ║ 2 ║
║ 3 ║ ghi ║ 2 ║
║ 4 ║ jkl ║ 3 ║
║ 4 ║ jkl ║ 4 ║
║ 5 ║ mno ║ 4 ║
║ 5 ║ mno ║ 5 ║
╚════╩══════╩═══════╝