表格1:
A B C
Test 1 This
Test1 1;4 That
Test2 7 What
Test3 6;2 Which
Test4 1;2;7 Where
表2:
X Z
1 Sun
2 Mon
3 Tue
4 Wed
5 Thu
6 Fri
7 Sat
SQL:
Select
t1.A,
t2.Z
from
[dbo].[Table 1] t1
inner join [dbo].[Table2] t2
on t1.B = t2.X
它仅适用于在列中只有1个条目B
但在2个或更多条目失败的行。
我该如何修改Sql,以便它给我这样的结果:
A Z
Test Sun
Test1 Sun;Wed
Test2 Sat
Test3 Fri;Mon
Test4 Sun;Mon;Sat
使用Strings和XML的乐趣,这里有一点(按比例缩小)标记数据的技术。
创建一些样本数据
Declare @Table1 table (A varchar(100),B varchar(100), C varchar(100))
Insert Into @Table1 values
('Test','1','This'),('Test1','1;4','That'),('Test2','7','What'),('Test3','6;2','Which'),('Test4','1;2;7','Where')
Declare @Table2 table (X int,Z varchar(100))
Insert Into @Table2 values
(1,'Sun'),(2,'Mon'),(3,'Tue'),(4,'Wed'),(5,'Thu'),(6,'Fri'),(7,'Sat')
SQL
Declare @XML xml,@Str varchar(max) = (Select a,z='['+replace(b,';','];[')+']' From @Table1 For XML Raw)
Select @Str = Replace(@Str,'['+cast(X as varchar(25))+']',Z) From @Table2
Select @XML = @Str
Select a = r.value('@a','varchar(100)')
,z = r.value('@z','varchar(100)')
From @XML.nodes('/row') as A(r)
退货
a z
Test Sun
Test1 Sun;Wed
Test2 Sat
Test3 Fri;Mon
Test4 Sun;Mon;Sat
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句