【问题标题】:SQL Table Self Join (or Union?) TroubleSQL 表自联接(或联合?)麻烦
【发布时间】:2017-06-15 17:03:03
【问题描述】:

如何从该表中获得这些结果?我不完全确定我应该做的是工会还是加入。任何帮助将不胜感激。

表格

WorkOrderID   Activity      PlannedDuration    ActualDuration
11            Activity 1    4                  3.5
11            Activity 2    4                  3.6
11            Activity 3    4                  5
11            Activity 4    8                  7.2
11            Activity 5    6                  6
22            Activity 1    4                  3.5
22            Activity 2    4                  4
22            Activity 3    4                  3.9
22            Activity 4    8                  12
22            Activity 6    3                  3

结果

Activity        ActualDuration11    ActualDuration22 
Activity 1      3.5                 3.5 
Activity 2      3.6                 4 
Activity 3      5                   3.9 
Activity 4      7.2                 12 

【问题讨论】:

  • 是否可以使用枢轴?
  • 我正在考虑使用带有案例声明的 Group By 来确定适当的列。 WorkOrderID 是否只有 11 和 22?

标签: sql join union


【解决方案1】:

您可以通过将同一个表中的两个SELECT 语句连接起来并连接它们来完成此操作。查询可能如下所示:

SELECT * FROM
    (SELECT Activity, PlannedDuration, ActualDuration as ActualDuration11
    FROM YOUR_TABLE
    WHERE WorkOrderID = 11) t1
JOIN
    (SELECT Activity, PlannedDuration, ActualDuration as ActualDuration22
    FROM YOUR_TABLE
    WHERE WorkOrderID = 22) t2
        ON t1.Activity = t2.Activity;

【讨论】:

    【解决方案2】:

    试试这个:

    select foo.Activity, foo.ActualDuration as ActualDuration11, foobar.ActualDuration as ActualDuration22 
    from (select Activity, ActualDuration from TABLENAME where WorkOrderID = 11) as foo 
    join (Select Activity, ActualDuration from TABLENAME where WorkOrderID = 22) as foobar on (foo.Activity = foobar.Activity);
    

    它使用连接。您可能需要对其进行调整(添加分组依据等)以使其适用于您的实际数据库,但这应该是一个很好的框架。

    在我的测试用例中,上面的查询返回了以下内容:

      Activity  | ActualDuration11 | ActualDuration12 
    ------------+------------------+-----------------
     Activity 1 |   3.5            |   3.5
     Activity 2 |   3.6            |   4
     Activity 3 |   5              |   3.9
    (3 rows)
    

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-06
      • 2013-01-07
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多