簡體   English   中英

在選擇查詢中加入表值函數

[英]Join on Table valued function in select query

我有ques表:

查詢表

我有用戶定義的split功能:

Select * from split('1,2,3,4')

它通過如下分割字符串以表格格式返回數據

Split()返回的數據

我想寫上選擇查詢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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM