【问题标题】:Using CASE with GROUP BY将 CASE 与 GROUP BY 一起使用
【发布时间】:2014-03-18 03:57:50
【问题描述】:

我在 T-SQL 中有以下查询:

SELECT dbo.table2.device, 
    dbo.table2.CREATETIME AS create_time,
    CASE WHEN dbo.table1.ACTIONID = 1 
        THEN dbo.table1.startstop 
    END AS start_time,
    CASE WHEN dbo.table1.ACTIONID  = 2 
        THEN dbo.table1.startstop 
    END AS stop_time,
    dbo.table2.collect_time
FROM dbo.table2
JOIN dbo.table1 ON dbo.table1.CREATETIME = dbo.table2.CREATETIME;

...这给了我一个包含几行的结果表,每行都是重复的,一次开始-一次结束-时间(sql时间-为简单起见而缩短)-另一个为NULL-例如:

device | create_time | start_time | stop_time | collect_time
1      | 0000001     | 0000001    | NULL      | 0000001
1      | 0000001     | NULL       | 0000002   | 0000001

我想将这两行(以 create_time 作为 ID)分组,以便将它们合二为一......谢谢!

【问题讨论】:

    标签: tsql group-by case


    【解决方案1】:

    您可以聚合 (SUM) 这些列:

    SELECT dbo.table2.device, 
        dbo.table2.CREATETIME AS create_time,
        SUM(CASE WHEN dbo.table1.ACTIONID = 1 
            THEN dbo.table1.startstop ELSE 0
        END) AS start_time,
        SUM(CASE WHEN dbo.table1.ACTIONID  = 2 
            THEN dbo.table1.startstop ELSE 0
        END) AS stop_time,
        dbo.table2.collect_time
    FROM dbo.table2
    JOIN dbo.table1 ON dbo.table1.CREATETIME = dbo.table2.CREATETIME
    GROUP BY dbo.table2.device, dbo.table2.CREATETIME, dbo.table2.collect_time;
    

    【讨论】:

      【解决方案2】:

      我也认为使用子查询也可以解决

      SELECT
      X.Device
      ,sum(X.start_time)
      ,sum(X.stop_time)
      ,X.collect_time
      from(
      SELECT dbo.table2.device, 
          dbo.table2.CREATETIME AS create_time,
          CASE WHEN dbo.table1.ACTIONID = 1 
              THEN dbo.table1.startstop 
          END AS start_time,
          CASE WHEN dbo.table1.ACTIONID  = 2 
              THEN dbo.table1.startstop 
          END AS stop_time,
          dbo.table2.collect_time
      FROM dbo.table2
      JOIN dbo.table1 ON dbo.table1.CREATETIME = dbo.table2.CREATETIME) AS X
      group by
      X.Device, X.collect_time
      

      【讨论】:

      • 我可能会比较这两个版本的性能...感谢您的意见!
      猜你喜欢
      • 1970-01-01
      • 2022-10-22
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多