简体   繁体   English

根据SQL Server标准将单列汇总到多个列

[英]Sum a Single column into multiple columns based on criteria SQL Server

Right now I am collecting a sum of times based on grouping by a part, job, machine, and type. 现在,我正在根据部件,工作,机器和类型进行分组来收集一些时间。

I would like to have the summed times to be split across multiple columns rather than multiple rows based on the type. 我希望将总计时间分成多个列而不是基于类型的多行。 How can I do this? 我怎样才能做到这一点?

Here is my code 这是我的代码

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]

Which produces: 哪个产生:

在此输入图像描述

But I want: 但我想要:

在此输入图像描述

Thank you All! 谢谢你们!

This is a form of table pivoting . 这是表格pivoting一种形式。 Here's one way to do that with conditional aggregation : 以下是使用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]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM