在 SQL 中,我需要根据另一列汇总一列的不同值
In SQL I need to summarize different values of a column based on another column
我需要查询来汇总不同的 ResourceId,您可以查看 "G1" 和一系列 "M0" 资源。
我希望这个 "M0" 资源作为 "Press shop" 总结,其 scheduledqty 作为总和,G1 作为 "Grinding".
这是我的查询:
Select
'' as Detail,
ShiftDate,
Max(ShiftId) as ShiftId,
ResourceId,
ResourceDesc,
LineId,
CellNo,
Item,
ItemDesc,
Sum(ScheduledQty) as ScheduledQty
from (
Select Case When b.Remarks= 'B' and cast(a.PlannedStartTime as Time) <='08:30:00.0000000'
Then Case When datename(dw,cast(a.PlannedStartTime as Date))='Monday'
Then cast(a.PlannedStartTime-2 as Date)
else cast(a.PlannedStartTime-1 as Date) end
Else cast(a.PlannedStartTime as Date)
End as ShiftDate,
b.Remarks as ShiftId,
a.ResourceId,
c.ResourceDesc,
c.LineId,
c.CellNo,
a.RoutingId as Item,
d.ItemDesc,
convert(nvarchar(8),a.PlannedStartTime,114) as StartTime,
convert(nvarchar(8),a.PlannedEndTime,114) as EndTime,
Sum(Round(a.QtyAllocated,0)) as ScheduledQty
From WorkOrderOpResPlan a
Left Join LocationCalendar b On a.PlantId=b.PlantId
and Cast(a.PlannedStartTime as Time)>=Cast(b.ShiftStartTime as Time)
and Cast(a.PlannedEndTime as Time)<=cast(b.ShiftEndTime as Time)
Inner Join ResourceMaster c on a.ResourceId=c.ResourceId
and a.PlantId=c.PlantId and c.ResourceType='Simple'
Left Join ItemMaster d On a.RoutingId=d.Item
and a.PlantId=d.PlantId
Where a.PlantId='SDL'
Group by
b.Remarks,
a.ResourceId,
c.ResourceDesc,
c.LineId,
c.CellNo,
a.RoutingId,
d.ItemDesc,
a.PlannedStartTime,
a.PlannedEndTime)x
Where ShiftDate<=Cast(GetDate()+2 as Date)
Group by ShiftDate, ResourceId, ResourceDesc, LineId, CellNo, Item, ItemDesc
我想根据不同的 ResourceId 来汇总 scheduledQty。请帮助我
这是图片 1
请试试这个。请注意,要减少行数,您必须决定不需要哪些列值(例如项目和项目描述)。
SELECT
'' AS Detail
, ShiftDate
, MAX(ShiftId) AS ShiftId
, ResourceId
, ResourceDesc
, LineId
, CellNo
, SUM(ScheduledQty) AS ScheduledQty
FROM (
SELECT
CASE
WHEN b.Remarks = 'B' AND
CAST(a.PlannedStartTime AS time) <= '08:30:00.0000000' THEN CASE
WHEN DATENAME(dw, CAST(a.PlannedStartTime AS date)) = 'Monday' THEN CAST(a.PlannedStartTime - 2 AS date)
ELSE CAST(a.PlannedStartTime - 1 AS date)
END
ELSE CAST(a.PlannedStartTime AS date)
END AS ShiftDate
, b.Remarks AS ShiftId
, a.ResourceId
, CASE
WHEN a.ResourceId = 'M0' THEN 'Press shop'
WHEN a.ResourceId = 'G1' THEN 'Grinding'
ELSE c.ResourceDesc
END AS ResourceDesc
, c.LineId
, c.CellNo
, a.RoutingId AS Item
, SUM(ROUND(a.QtyAllocated, 0)) AS ScheduledQty
FROM WorkOrderOpResPlan a
LEFT JOIN LocationCalendar b ON a.PlantId = b.PlantId
AND CAST(a.PlannedStartTime AS time) >= CAST(b.ShiftStartTime AS time)
AND CAST(a.PlannedEndTime AS time) <= CAST(b.ShiftEndTime AS time)
INNER JOIN ResourceMaster c ON a.ResourceId = c.ResourceId
AND a.PlantId = c.PlantId
AND c.ResourceType = 'Simple'
LEFT JOIN ItemMaster d ON a.RoutingId = d.Item
AND a.PlantId = d.PlantId
WHERE a.PlantId = 'SDL'
GROUP BY
b.Remarks
, a.ResourceId
, CASE
WHEN a.ResourceId = 'M0' THEN 'Press shop'
WHEN a.ResourceId = 'G1' THEN 'Grinding'
ELSE c.ResourceDesc
END
, c.LineId
, c.CellNo
, a.RoutingId
) x
WHERE ShiftDate <= CAST(GETDATE() + 2 AS date)
GROUP BY
ShiftDate
, ResourceId
, ResourceDesc
, LineId
, CellNo
我需要查询来汇总不同的 ResourceId,您可以查看 "G1" 和一系列 "M0" 资源。
我希望这个 "M0" 资源作为 "Press shop" 总结,其 scheduledqty 作为总和,G1 作为 "Grinding".
这是我的查询:
Select
'' as Detail,
ShiftDate,
Max(ShiftId) as ShiftId,
ResourceId,
ResourceDesc,
LineId,
CellNo,
Item,
ItemDesc,
Sum(ScheduledQty) as ScheduledQty
from (
Select Case When b.Remarks= 'B' and cast(a.PlannedStartTime as Time) <='08:30:00.0000000'
Then Case When datename(dw,cast(a.PlannedStartTime as Date))='Monday'
Then cast(a.PlannedStartTime-2 as Date)
else cast(a.PlannedStartTime-1 as Date) end
Else cast(a.PlannedStartTime as Date)
End as ShiftDate,
b.Remarks as ShiftId,
a.ResourceId,
c.ResourceDesc,
c.LineId,
c.CellNo,
a.RoutingId as Item,
d.ItemDesc,
convert(nvarchar(8),a.PlannedStartTime,114) as StartTime,
convert(nvarchar(8),a.PlannedEndTime,114) as EndTime,
Sum(Round(a.QtyAllocated,0)) as ScheduledQty
From WorkOrderOpResPlan a
Left Join LocationCalendar b On a.PlantId=b.PlantId
and Cast(a.PlannedStartTime as Time)>=Cast(b.ShiftStartTime as Time)
and Cast(a.PlannedEndTime as Time)<=cast(b.ShiftEndTime as Time)
Inner Join ResourceMaster c on a.ResourceId=c.ResourceId
and a.PlantId=c.PlantId and c.ResourceType='Simple'
Left Join ItemMaster d On a.RoutingId=d.Item
and a.PlantId=d.PlantId
Where a.PlantId='SDL'
Group by
b.Remarks,
a.ResourceId,
c.ResourceDesc,
c.LineId,
c.CellNo,
a.RoutingId,
d.ItemDesc,
a.PlannedStartTime,
a.PlannedEndTime)x
Where ShiftDate<=Cast(GetDate()+2 as Date)
Group by ShiftDate, ResourceId, ResourceDesc, LineId, CellNo, Item, ItemDesc
我想根据不同的 ResourceId 来汇总 scheduledQty。请帮助我
这是图片
请试试这个。请注意,要减少行数,您必须决定不需要哪些列值(例如项目和项目描述)。
SELECT
'' AS Detail
, ShiftDate
, MAX(ShiftId) AS ShiftId
, ResourceId
, ResourceDesc
, LineId
, CellNo
, SUM(ScheduledQty) AS ScheduledQty
FROM (
SELECT
CASE
WHEN b.Remarks = 'B' AND
CAST(a.PlannedStartTime AS time) <= '08:30:00.0000000' THEN CASE
WHEN DATENAME(dw, CAST(a.PlannedStartTime AS date)) = 'Monday' THEN CAST(a.PlannedStartTime - 2 AS date)
ELSE CAST(a.PlannedStartTime - 1 AS date)
END
ELSE CAST(a.PlannedStartTime AS date)
END AS ShiftDate
, b.Remarks AS ShiftId
, a.ResourceId
, CASE
WHEN a.ResourceId = 'M0' THEN 'Press shop'
WHEN a.ResourceId = 'G1' THEN 'Grinding'
ELSE c.ResourceDesc
END AS ResourceDesc
, c.LineId
, c.CellNo
, a.RoutingId AS Item
, SUM(ROUND(a.QtyAllocated, 0)) AS ScheduledQty
FROM WorkOrderOpResPlan a
LEFT JOIN LocationCalendar b ON a.PlantId = b.PlantId
AND CAST(a.PlannedStartTime AS time) >= CAST(b.ShiftStartTime AS time)
AND CAST(a.PlannedEndTime AS time) <= CAST(b.ShiftEndTime AS time)
INNER JOIN ResourceMaster c ON a.ResourceId = c.ResourceId
AND a.PlantId = c.PlantId
AND c.ResourceType = 'Simple'
LEFT JOIN ItemMaster d ON a.RoutingId = d.Item
AND a.PlantId = d.PlantId
WHERE a.PlantId = 'SDL'
GROUP BY
b.Remarks
, a.ResourceId
, CASE
WHEN a.ResourceId = 'M0' THEN 'Press shop'
WHEN a.ResourceId = 'G1' THEN 'Grinding'
ELSE c.ResourceDesc
END
, c.LineId
, c.CellNo
, a.RoutingId
) x
WHERE ShiftDate <= CAST(GETDATE() + 2 AS date)
GROUP BY
ShiftDate
, ResourceId
, ResourceDesc
, LineId
, CellNo