【问题标题】:Sum a Single column into multiple columns based on criteria SQL Server根据条件 SQL Server 将单列汇总为多列
【发布时间】:2016-08-16 23:13:48
【问题描述】:

现在我正在根据零件、作业、机器和类型的分组收集时间总和。

我希望根据类型将总时间拆分为多列而不是多行。我该怎么做?

这是我的代码

SELECT
    m.[machineName]
    ,pr.[jobNumber]
    ,p.[partNumber]
    ,sc.[type]
    ,SUM(pl.[elapsedTime]) AS elapsedTime 
FROM wincc.dbo.productionLog pl
    INNER JOIN wincc.dbo.machines m        ON pl.[machineId]       = m.id
    INNER JOIN wincc.dbo.productionRuns pr ON pl.[productionRunId] = pr.id
    INNER JOIN wincc.dbo.parts p           ON pr.[partId]          = p.Id
    INNER JOIN wincc.dbo.statusCodes sc    ON pl.[statusCodeId]    = sc.id
GROUP BY
    m.[machineName]
    ,pr.[jobNumber]
    ,p.[partNumber]
    ,sc.[type]

产生:

但我想要:

谢谢大家!

【问题讨论】:

    标签: sql sql-server sum pivot


    【解决方案1】:

    这是pivoting 的表格形式。这是使用conditional aggregation 的一种方法:

    SELECT
        m.[machineName]
        ,pr.[jobNumber]
        ,p.[partNumber]
        ,SUM(CASE WHEN sc.Type = 'planned downtime' then pl.[elapsedTime] END) AS plannedDT
        ,SUM(CASE WHEN sc.Type = 'unplanned downtime' then pl.[elapsedTime] END) AS unplannedDT
        ,SUM(CASE WHEN sc.Type = 'production' then pl.[elapsedTime] END) AS production
        ,SUM(CASE WHEN sc.Type = 'rework' then pl.[elapsedTime] END) AS rework
    FROM wincc.dbo.productionLog pl
        INNER JOIN wincc.dbo.machines m        ON pl.[machineId]       = m.id
        INNER JOIN wincc.dbo.productionRuns pr ON pl.[productionRunId] = pr.id
        INNER JOIN wincc.dbo.parts p           ON pr.[partId]          = p.Id
        INNER JOIN wincc.dbo.statusCodes sc    ON pl.[statusCodeId]    = sc.id
    GROUP BY
        m.[machineName]
        ,pr.[jobNumber]
        ,p.[partNumber]
    

    【讨论】:

      猜你喜欢
      • 2019-03-06
      • 2021-06-28
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 2018-09-04
      • 2022-11-10
      相关资源
      最近更新 更多