SQL SSMS 2017详细结果

时间:2019-06-19 10:31:05

标签: sql sql-server

我对SQL有点新手,所以我想问一个可能的解决方案,如何创建一个显示所需结果的查询。 有一张表,其中数据是从一个主PLC连续获取的,因此所有数据都收集在一张表中。每1个班次会有一堆数据(大约五百万)。在“ Op”列中,由机器的ID表示机器(Op =机器的ID)。机器大约是1到218。每台机器的周期时间分为开始过程(T1),持续时间(T2),结束过程(T3)和结果。 “结果”可以解释为0-表示正常,1-表示不正常,2-空托盘,3-托盘自由流动。这些是PLC直接报告到数据库表中的结果。

https://i.ibb.co/nkmLkHG/palletOP.png

我已经尝试了基本的语句来为精确的记录状态(0、1、2、3)和精确的机器计算这些结果。可以,但不理想。

SELECT Count(*) as Result0
FROM PalletOperations
where Op = 1 and Result = 0

预期结果是显示从1到218的每台计算机的完整列表,其中多少结果计为0、1、2和3。其他列与此时间无关。主要目标是显示结果,因为每台机器都有自己的行,并带有计数状态结果的预期数据。如果有218台计算机,那么我需要分别从1到218行生成218台计算机的结果。如上所述,每一行都应包含Op(名称1,2,3,4 .... 218),并带有状态0、1、2、3的计数结果列。

欢迎任何建议

2 个答案:

答案 0 :(得分:1)

我认为您需要条件聚合:

SELECT op,
       SUM(CASE WHEN Result = 0 THEN 1 ELSE 0 END) as result_0,
       SUM(CASE WHEN Result = 1 THEN 1 ELSE 0 END) as result_1,
       SUM(CASE WHEN Result = 2 THEN 1 ELSE 0 END) as result_2,
       SUM(CASE WHEN Result = 3 THEN 1 ELSE 0 END) as result_3
FROM PalletOperations
GROUP BY op;

答案 1 :(得分:0)

您可以使用以下sql语句获取每个结果的每台计算机的结果计数

SELECT op,Result, count(*)
FROM PalletOperations
GROUP BY op,Result;