[英]Join on Table valued function in select query
我有ques
表:
我有用戶定義的split
功能:
Select * from split('1,2,3,4')
它通過如下分割字符串以表格格式返回數據
我想寫上選擇查詢ques
表分割功能得到像下面的數據:
id | ques | tags
-----------------
1 | abc | 1
2 | def | 1
2 | def | 2
3 | ghi | 2
4 | jkl | 3
4 | jkl | 4
任何人都可以幫助我加入嗎?
您需要一個數字表來有效地解析逗號分隔的字符串。 您可以在交叉應用到該表的子查詢中執行此操作:
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)
迪恩先生的方法很有創造力,但我認為您可以通過使用與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 ║
╚════╩══════╩═══════╝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.