繁体   English   中英

需要帮助根据标准 SQL 转置一列中的数据

[英]Need help transposing data from one column based on criteria SQL

我面临着根据日期字段汇总作业列表的总估计机器时间与总实际机器时间的挑战。 问题是所有估计和实际条目都在一列中。

我需要帮助将这些数据转换为单独的列以便于分析。

这是表格外观的简化示例...

工作编号 操作说明 操作长度 数量 发布类型 开始日期和时间
345271 德斯特 1330:先生 0.33 1 1 2021-04-27 16:00
345271 德斯特 1330:奔跑 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”是实际值。

我想要的是一张看起来像这样的桌子......

工作编号 估计机器 预计时间 订购数量 机器使用 总时间 总数(量
345271 德斯特 1330 1.83 15 德斯特3 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 小时指定的日期。

我做错了什么? 有没有更好的方法来获得我需要的东西?

非常感谢,

我想你只想要条件聚合:

SELECT JobNo,
       MAX(CASE WHEN PostingType = 1 THEN LEFT(OperationDesc, CHARINDEX(':', OperationDesc) - 1) END) as MachineEstimated,
       SUM(CASE WHEN PostingType = 1 THEN OperationLength END) as EstimatedTime,
       SUM(CASE WHEN PostingType = 1 Quantity END) as QuantityOrdered,
       MAX(CASE WHEN PostingType = 2 THEN LEFT(OperationDesc, CHARINDEX(':', OperationDesc) - 1) END) as MachineUsed,
       SUM(CASE WHEN PostingType = 2 THEN OperationLength END) as TotalTime,
       SUM(CASE WHEN PostingType = 2 Quantity END) as TotalQuantity
FROM TSE
WHERE StartDateAndTime >= '2021-04-28T06:00:00.000' AND
      StartDateAndTime <= '2021-04-29T59:59:00.000' 
GROUP BY JobNo;

注意: PostingType看起来像一个数字,所以我去掉了单引号。 如果它确实是一个字符串,则使用单引号。 不要混合数据类型。

暂无
暂无

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

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