2014年1月16日 星期四

T-SQL如何join到函數(function)回傳的Table資料

回答論壇問題順便做個紀錄,「SQL字串找尋問題

如何將下列資料用select語法取出B開頭的資料呢?

ID Data
001 A000,B000,C000
002 B000,D000,E000

希望結果:

001 B000

002 B000

最主要先切割字串來分析,首先搭配之前寫的備忘錄,通常我會在SQL建立一個切割字串的函數「在T-SQL裡面切割字串(Spilt String)

接著就能將這個函數回傳的table join起來,再進行篩選

Declare @table Table
(
ID VARCHAR(3),
data NVARCHAR(15)
)

Insert INTO @table values ('001','A000,B000,C000')
Insert INTO @table values ('002','B000,D000,E000')


select tb.id,tb2.data from @table tb
CROSS APPLY Split(data,',') AS tb2
where tb2.data like 'B%'

特別APPLY是SQL 2005之後才提供的語法,所以要注意版本相容性


APPLY又分為CROSS APPLY和OUTER APPLY,


CROSS APPLY 可以把發成我們常用的inner join ,會查詢有交集的結果


OUTER APPLY就相當於left join,會以左邊的資料表為主


詳細的範例可以以上面的MSDN連結延伸閱讀。


執行結果:


image

沒有留言:

張貼留言