gpt4 book ai didi

SQL Join/Pivot/Unpivot = 疯狂

转载 作者:行者123 更新时间:2023-12-02 09:03:24 31 4
gpt4 key购买 nike

所以,我做了很多搜索和摆弄,但找不到解决方案。也许我的情况很独特——或者更有可能我只是不知道我到底在做什么。我比刚开始时更接近了,所以这令人振奋。不管怎样 - 我们来了智囊团 - 非常感谢任何帮助。

我需要加入 2 个如下所示的查找表(还没有足够的代表点来发布图像,所以这是我的假装表):

Social Network Member [table]
member_id social_network_id connection_id_string
16972 1 www.linkedin.com/somename
16972 2 www.twitter.com/somename
16972 3 www.facebook.com/somename
180301 1 www.linkedin.com/anothername

Social Network [table]
social_network_id name calling_string
1 Linkedin www.linkedin.com
2 Twitter www.twitter.com
3 Facebook www.facebook.com

这就是我想要的。我尝试了很多方法,包括枢轴和反枢轴、交叉应用 - 但我似乎无法得到这个结果:

member_id   linkedin                     facebook                     twitter
16972 www.linkedin.com/somename www.facebook.com/somename www.twitter.com/somename

我可以使用它,加入后我没有使用social_network_id或calling_string。这是我的查询,但它并没有完全完成工作。

SELECT member_id, [facebook],[linkedin],[myspace],[twitter]
FROM (
SELECT member_id,name,social_network_id,calling_string,connection_id_string
FROM social_network_member INNER JOIN
social_network ON social_network_member.social_network_id = social_network.social_network_id
CROSS APPLY (VALUES ('NAME',name),
('CONNECTION STRING', connection_id_string),
('CALLING STRING',calling_string))
Unpivoted(club_id,member_id)) as Sourcetable
Pivot (MAX(connection_id_string) For name in([facebook],[linkedin],[myspace],[twitter])) AS PVT

我能说的最好的是交叉应用实际上没有做任何事情。我有点猜测那里的语法..你能告诉我吗?

这就是我得到的结果(从我在搜索中看到的情况来看有些典型):

member_id     facebook                  linkedin                    myspace     twitter
16972 NULL www.linkedin.com/somename NULL NULL
16972 www.facebook.com/somename NULL NULL NULL
...
...

我想要的可能吗?有关如何到达那里的任何指示吗?我的查询全部被抬高了吗?

提前感谢女士们先生们。

我之前忘记提及这一点,但我正在使用 SQL Server 2012 - SSMS。

已解决 我使用了 Bluefeet 下面提供的答案,它的效果非常好。还要感谢 Cha 抽出时间提供帮助。

最佳答案

您当前的查询非常接近。如果上面的表格结构正确,那么您似乎不需要使用CROSS APPLY,因为您没有任何需要取消透视的内容。

如果删除 CROSS APPLY,那么您可以使用 PIVOT 轻松获得结果:

SELECT member_id, [facebook],[linkedin],[myspace],[twitter]
FROM
(
SELECT m.member_id,
n.name,
m.connection_id_string
FROM social_network_member m
INNER JOIN social_network n
ON m.social_network_id = n.social_network_id
) d
pivot
(
max(connection_id_string)
for name in ([facebook],[linkedin],[myspace],[twitter])
) piv;

参见SQL Fiddle with Demo .

如果您有未知数量的值,那么您可以使用动态 SQL:

DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(name)
from social_network
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')

set @query = 'SELECT member_id, ' + @cols + '
from
(
SELECT m.member_id,
n.name,
m.connection_id_string
FROM social_network_member m
INNER JOIN social_network n
ON m.social_network_id = n.social_network_id
) x
pivot
(
max(connection_id_string)
for name in (' + @cols + ')
) p '

execute sp_executesql @query;

参见SQL Fiddle with Demo

关于SQL Join/Pivot/Unpivot = 疯狂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19283317/

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