En ce moment, je recueille une sum de fois en fonction du regroupement par partie, travail, machine et type.
Je souhaite que les heures additionnées soient réparties sur plusieurs colonnes plutôt que sur plusieurs lignes en fonction du type. Comment puis-je faire ceci?
Voici mon 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]
Qui produit:
Mais je veux:
Merci à tous!
C'est une forme de pivoting
de table. Voici une façon de le faire avec l' 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]