Sql server 无聚合的SQL联接表透视
我有两张桌子:Sql server 无聚合的SQL联接表透视,sql-server,Sql Server,我有两张桌子: Table1 ID TYPE 1 ABC1 2 ABC2 3 ABC3 Table2 ID Data 1 100 1 101 2 10 2 90 我希望结果如下所示: ID Data1 Data2 1 100 101 2 10 90 但我在尝试创建轴心点时遇到了麻烦。到目前为止,我已经: With Inital_Data As ( Select A.ID, B.Data As Data1, B.Data As D
Table1
ID TYPE
1 ABC1
2 ABC2
3 ABC3
Table2
ID Data
1 100
1 101
2 10
2 90
我希望结果如下所示:
ID Data1 Data2
1 100 101
2 10 90
但我在尝试创建轴心点时遇到了麻烦。到目前为止,我已经:
With Inital_Data As (
Select
A.ID,
B.Data As Data1,
B.Data As Data2
From
Table1 A join
Table2 B on
A.ID = B.ID
)
Select *
From
Initial_Data
PIVOT
(Max(ID) FOR Data IN (Data1,Data2)) p
我知道这是胡说八道,但到目前为止,甚至连我试图实现的逻辑都无法理解,更不用说语法了!谁能帮我一把吗?具有多个列的Pivot需要一些技巧,我更喜欢XML连接。首先,我只在一个XML中获取每个ID的所有值,然后您可以逐个获取这些值: 只需将其粘贴到一个空的查询窗口中并执行即可。适应你的需要 编辑:包括表1中的列类型作为ID的标题
DECLARE @Table1 TABLE(ID INT,[TYPE] VARCHAR(10));
INSERT INTO @Table1 VALUES
(1,'ABC1')
,(2,'ABC2')
,(3,'ABC3');
DECLARE @Table2 TABLE(ID INT,DATA INT);
INSERT INTO @Table2 VALUES
(1,100)
,(1,101)
,(2,10)
,(2,90);
WITH DistinctIDs AS
(
SELECT DISTINCT tbl2.ID,tbl1.[TYPE]
FROM @Table2 AS tbl2
INNER JOIN @Table1 AS tbl1 ON tbl1.ID=tbl2.ID
)
SELECT ID,[TYPE]
,concatXML.x.value('/root[1]/item[1]/@data','int') AS Data1
,concatXML.x.value('/root[1]/item[2]/@data','int') AS Data2
FROM DistinctIDs AS dIDs
CROSS APPLY
(
SELECT ID AS [@id],DATA AS [@data]
FROM @Table2 AS tbl WHERE tbl.ID=dIDs.ID
FOR XML PATH('item'), ROOT('root'),TYPE
) AS concatXML(x)
这里可能会回答你:你能提供你得到的输出吗?我没有得到任何输出,乔纳森,它出错了!:@Matthhollands,如果这是你的解决方案,请投赞成票和/或如果有帮助,请标记为接受。。。如果没有,就问吧!抱歉,Shnugo,结果的第一列中应该有表1中的Type列。谢谢你的回答。“我今天就要试试了。”Matthhollands编辑了我的代码,在结果中得到了[TYPE]列。如果有帮助,请投赞成票,谢谢