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]列。如果有帮助,请投赞成票,谢谢