【发布时间】:2021-07-22 18:50:43
【问题描述】:
我面临着根据日期字段汇总作业列表的总估计机器时间与总实际机器时间的挑战。问题是所有估计和实际条目都在一列中。
我需要帮助将这些数据转换成单独的列以便于分析。
这是表格外观的简化示例...
| JobNo | OperationDesc | OperationLength | Quantity | PostingType | StartDateAndTime |
|---|---|---|---|---|---|
| 345271 | Durst 1330: MR | 0.33 | 1 | 1 | 2021-04-27 16:00 |
| 345271 | Durst 1330: Run | 1.5 | 15 | 1 | 2021-04-27 16:00 |
| 345271 | Durst3 IDC | 0.5 | 3 | 2 | 2021-04-28 10:00 |
| 345271 | Durst3 IDC | 0.75 | 5 | 2 | 2021-04-28 11:00 |
| 345271 | Durst3 IDC | 1 | 10 | 2 | 2021-04-28 12:00 |
PostingType“1”是估计值,“2”是实际值。
我想要的是一个看起来像这样的表格......
| JobNo | EstimatedMachine | EstimatedTime | QuantityOrdered | MachineUsed | TotalTime | TotalQuantity |
|---|---|---|---|---|---|---|
| 345271 | Durst 1330 | 1.83 | 15 | Durst3 | 2.25 | 18 |
到目前为止我编写的代码是这样的..
SELECT JobNo
,(SELECT TOP 1 LEFT(OperationDesc, CHARINDEX(':', OperationDesc)-1) FROM TSE WHERE PostingType = '1') [MachineEstimated]
,(SELECT SUM(OperationLength) FROM TSE WHERE PostingType = '1') [EstimatedTime]
,(SELECT SUM(Quantity) FROM TSE WHERE PostingType = '1' AND OperationDesc NOT LIKE '%MR%') [QuantityOrdered]
,(SELECT TOP 1 LEFT(OperationDesc, CHARINDEX(' ', OperationDesc)-1) FROM TSE WHERE PostingType = '2') [MachineUsed]
,(SELECT SUM(OperationLength) FROM TSE WHERE PostingType = '2') [TotalTime]
,(SELECT SUM(Quantity) FROM TSE WHERE PostingType = '2') [TotalQuantity]
FROM TSE
WHERE StartDateAndTime >= '2021-04-28T06:00:00.000'
AND StartDateAndTime <= '2021-04-29T59:59:00.000'
GROUP BY JobNo
我得到的结果只包括在所选日期(28 日)运行的作业编号(PostingType 2),但其他列汇总了整个表格的总数,并且仅通过表格的第一个 OperationDesc 而不是仅指定的一天 24 小时。
我做错了什么?有没有更好的方法来获得我需要的东西?
非常感谢,
【问题讨论】:
-
您的代码不是有效的 MySQL 代码。请修复数据库标签,使其代表您真正使用的数据库。
标签: sql data-analysis