当连接表具有多个值

时间:2017-04-17 22:06:37

标签: 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  |  Value
------ | ------| -----
  100  | AA    |   $4
  100  | BB    |   ER
  200  | BB    |   AMB
  300  | AA    |   $10
  200  | AA    |   $5
  300  | BB    |   ER

我已经尝试了几个案例陈述,似乎为每个列出的值而不是单行返回一行,我不喜欢/想要这个......

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

1 个答案:

答案 0 :(得分:0)

我使用了2个常用表表达式来获取您需要的结果。 Common_Table_Expression

--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