Sql server 当联接表有多个值时,返回一行
四处看了一下,但找不到任何与我需要的相似的东西。我有两个表在ID上连接,第二个表在使用相同ID的不同属性下有关于第一个表的多个详细信息。因此ID 1有A、B、C等属性,每个ID总共有9个属性。我希望每个ID返回一行,其中包含所有不同的属性 这是我的桌子Sql server 当联接表有多个值时,返回一行,sql-server,concatenation,jointable,Sql Server,Concatenation,Jointable,四处看了一下,但找不到任何与我需要的相似的东西。我有两个表在ID上连接,第二个表在使用相同ID的不同属性下有关于第一个表的多个详细信息。因此ID 1有A、B、C等属性,每个ID总共有9个属性。我希望每个ID返回一行,其中包含所有不同的属性 这是我的桌子 MAIN_Table ID | Name ------ | ------ 100 | Frank 200 | Bill 300 | Anne Property_Table ID | Prop
MAIN_Table
ID | Name
------ | ------
100 | Frank
200 | Bill
300 | Anne
Property_Table
ID | Prop | Value
------ | ------| -----
100 | AA | $4
100 | BB | ER
200 | BB | AMB
300 | AA | $10
200 | AA | $5
300 | BB | ER
我尝试了几个case语句,它们似乎为每个列出的值返回一行,而不是在一行上,我不喜欢/不想要这个
ID | Name | Prop_AA | Prop_BB
----- | ------ | ------ | -------
100 | Frank | $4 | NULL
100 | Frank | NULL | ER
200 | Bill | $5 | NULL
200 | Bill | NULL | AMB
300 | Anne | $10 | NULL
300 | Anne | NULL | ER
我希望每件事都在一行每一个ID像这样
ID | Name | Prop AA | Prop BB
----- | ------ | ------ | -------
100 | Frank | $4 | ER
200 | Bill | $5 | AMB
300 | Anne | $10 | ER
我使用了两个常用的表表达式来获得所需的结果
我似乎得到了我想要的结果,使用Max(当prop=AA,然后Value)作为propaa,但我有许多其他列,并且必须将这些列中的每一列添加到一个group by,这会导致错误吗?
--CTE to get Prop AA's Id & Value
WITH Prop_AA AS
(
SELECT ID,Value
FROM Property_Table
WHERE Prop = 'AA'
),
--CTE to get Prop BB's Id & Value
Prop_BB AS
(
SELECT ID,Value
FROM Property_Table
WHERE Prop = 'BB'
)
SELECT mt.ID,Name,aa.Value as 'Prop AA',bb.Value as 'Prop BB'
FROM MAIN_Table mt
JOIN Prop_AA aa ON mt.ID = aa.ID -- Join Prop_AA
JOIN Prop_BB bb ON mt.ID = bb.ID -- Join Prop_BB
ORDER BY mt.ID