gpt4 book ai didi

sql - 如何将未知数量的行连接到另一行?

转载 作者:行者123 更新时间:2023-12-04 00:23:30 25 4
gpt4 key购买 nike

我有这种情况:

表A:

---------------
ID| SOME_VALUE|
---------------
1 | 123223 |
2 | 1232ff |
---------------

表 B:

------------------
ID | KEY | VALUE |
------------------
23 | 1 | 435 |
24 | 1 | 436 |
------------------

KEY 是对表 A 的 ID 的引用。我能否以某种方式加入这些表,以便获得以下结果:

表C

-------------------------
ID| SOME_VALUE| | |
-------------------------
1 | 123223 |435 |436 |
2 | 1232ff | | |
-------------------------

表 C 应该能够具有任意给定数量的列,具体取决于在表 B 中找到的匹配值的数量。

我希望这足以解释我在这里的目的。

谢谢。

最佳答案

您需要使用动态 PIVOT条款来做到这一点。

编辑:

好的,我已经根据以下示例数据进行了一些尝试:

Create Table TableA
(
IDCol int,
SomeValue varchar(50)
)
Create Table TableB
(
IDCol int,
KEYCol int,
Value varchar(50)
)

Insert into TableA
Values (1, '123223')
Insert Into TableA
Values (2,'1232ff')
Insert into TableA
Values (3, '222222')

Insert Into TableB
Values( 23, 1, 435)
Insert Into TableB
Values( 24, 1, 436)

Insert Into TableB
Values( 25, 3, 45)
Insert Into TableB
Values( 26, 3, 46)

Insert Into TableB
Values( 27, 3, 435)
Insert Into TableB
Values( 28, 3, 437)

您可以执行以下动态 SQL。

declare @sql varchar(max)
declare @pivot_list varchar(max)
declare @pivot_select varchar(max)

Select
@pivot_list = Coalesce(@Pivot_List + ', ','') + '[' + Value +']',
@Pivot_select = Coalesce(@pivot_Select, ', ','') +'IsNull([' + Value +'],'''') as [' + Value + '],'
From
(
Select distinct Value From dbo.TableB
)PivotCodes

Set @Sql = '
;With p as (

Select a.IdCol,
a.SomeValue,
b.Value
From dbo.TableA a
Left Join dbo.TableB b on a.IdCol = b.KeyCol
)
Select IdCol, SomeValue ' + Left(@pivot_select, Len(@Pivot_Select)-1) + '
From p
Pivot ( Max(Value) for Value in (' + @pivot_list + '
)
)as pvt
'

exec (@sql)

这将为您提供以下输出:

alt text

虽然这在目前有效,但维护起来将是一场噩梦。我建议尝试在其他地方实现这些结果。即不在 SQL 中!

祝你好运!

关于sql - 如何将未知数量的行连接到另一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4441599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com