SQL SSMS 2017 Детальный результат - PullRequest
0 голосов
/ 19 июня 2019

Я немного новичок в SQL, поэтому я хочу спросить о возможном решении, как создать запрос, который покажет желаемые результаты.Есть таблица, в которой данные поступают непрерывно из одного основного ПЛК, поэтому все собрано в одну таблицу.На 1 смену приходится куча данных (около полумиллиона).В столбце «Op» указаны машины, обозначенные их идентификаторами (Op = ID машины).Число машин составляет от 1 до 218. Время каждого цикла имеет свои машины, разделенные на начальный процесс (T1), продолжительность (T2), конечный процесс (T3) и результат.«Результат» можно интерпретировать как 0 - как ОК, 1 - не ОК, 2 - пустой поддон, 3 - свободный поток поддона.Это результаты того, что ПЛК сообщают непосредственно в таблицу базы данных.

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 машин, то мне нужно сгенерировать результаты 218 машин отдельно от 1 до 218 в строках.Каждая строка должна содержать Op (имя 1,2,3,4 .... 218) со столбцами подсчитанного результата для состояний 0,1,2,3, как упомянуто выше.

Любой совет приветствуется

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Я думаю, вы хотите условное агрегирование:

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;
0 голосов
/ 19 июня 2019

Вы можете использовать приведенный ниже SQL-оператор, чтобы получить количество результатов на машину на результат

SELECT op,Result, count(*)
FROM PalletOperations
GROUP BY op,Result;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...