我对SQL有点新手,所以我想问一个可能的解决方案,如何创建一个显示所需结果的查询。 有一张表,其中数据是从一个主PLC连续获取的,因此所有数据都收集在一张表中。每1个班次会有一堆数据(大约五百万)。在“ Op”列中,由机器的ID表示机器(Op =机器的ID)。机器大约是1到218。每台机器的周期时间分为开始过程(T1),持续时间(T2),结束过程(T3)和结果。 “结果”可以解释为0-表示正常,1-表示不正常,2-空托盘,3-托盘自由流动。这些是PLC直接报告到数据库表中的结果。
我已经尝试了基本的语句来为精确的记录状态(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的计数结果列。
欢迎任何建议
答案 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;