【问题标题】:Return a single row when joining table has many values当连接表有很多值时返回单行
【发布时间】:2017-09-13 14:20:12
【问题描述】:

环顾四周,但找不到任何与我需要的相似的东西。我有两个在 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

我尝试了几个 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

【问题讨论】:

标签: sql-server concatenation jointable


【解决方案1】:

我使用了 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

【讨论】:

    猜你喜欢
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2015-08-17
    • 2018-02-04
    • 2011-03-20
    • 2016-05-12
    相关资源
    最近更新 更多