[英]Get data on the basis of comma-separated ids present in row - SQL
表格1
HolId
1 Package17 2,1,5
2 Package13 5,4,3
表2
HolId1
1 New Years Day 2013-01-01 00:00:00.000
2 Republic Day 2013-01-26 00:00:00.000
3 Holi 2013-04-27 00:00:00.000
4 Memorial Day 2013-05-27 00:00:00.000
5 US Independence 2013-07-04 00:00:00.000
7 Labour Day 2013-09-02 00:00:00.000
我想顯示如下數據
HolId HolId1
Package17 2 2 Republic Day 2013-01-01 00:00:00.000
Package17 1 1 New Years Day 2013-04-27 00:00:00.000
Package17 5 5 US Independence 2013-05-27 00:00:00.000
Package13 5 5 US Independence 2013-07-04 00:00:00.000
Package13 4 4 Memorial Day 2013-05-27 00:00:00.000
Package13 3 3 Holi 2013-04-27 00:00:00.000
我的網格將顯示如下,我已經想到了
Package17
Republic Day 2013-01-01 00:00:00.000
New Years Day 2013-04-27 00:00:00.000
US Independence 2013-05-27 00:00:00.000
Package13
US Independence 2013-07-04 00:00:00.000
Memorial Day 2013-05-27 00:00:00.000
Holi 2013-04-27 00:00:00.000
這是MySQL
解決方案:
SELECT
T1.Pkg, T2.*
FROM Table2 T2
JOIN Table1 T1
ON FIND_IN_SET(T2.HolID1, T1.HolID)
這適用於SQL SERVER
SELECT
T1.Pkg, T2.*
FROM Table2 T2
JOIN Table1 T1
ON CHARINDEX(CAST(T2.HolID1 as varchar), T1.HolID) > 0
最好將表格去標准化,然后只需一個連接即可獲得結果。 如果必須使用當前架構。 希望以下代碼可以幫助您。
declare @tempTable table
( Package_Name varchar(100),
Holid int
)
declare @SQLString varchar(max)
declare @package_name varchar(100)
set @SQLString = ''
DECLARE @X XML
while @SQLString is not null
begin
set @SQLString = null
select top 1 @package_name=package_name, @SQLString = Holid
from Package
where package_name not in (select package_name from @tempTable)
if @SQLString is null
break
SET @X = CAST('' + REPLACE(@SQLString, ',', '') + '' AS XML)
insert into @tempTable
SELECT @package_name, t.value('.', 'INT')
FROM @x.nodes('/A') as x(t)
end
select * from @tempTable
select A., B.* from @tempTable A
inner join HolID1 B
on A.Holid = B.HolID1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.