#sql #sql-server #sum #ignition
Вопрос:
Я пытаюсь добавить часы, указанные для каждой машины. Мне нужно просмотреть три таблицы, чтобы получить правильные и самые последние данные. Я смог получить список часов, которые мне нужно добавить.
Тем не менее, я пробовал всевозможные способы использования функции SUM(), но она всегда выдает мне совокупные ошибки.
Вот код SQL:
SELECT
(SELECT TOP 1 change.hours
FROM change WHERE change.id = part.id
ORDER BY change.timeStamp DESC) as 'Hours'
FROM change
INNER JOIN part ON (part.id = change.id)
INNER JOIN completed ON (part.id = completed.id)
WHERE part.id NOT IN (SELECT completed.id FROM completed WHERE completed.completed = 1)
and (SELECT TOP 1 change.machine FROM change WHERE part.id = change.id ORDER BY change.timeStamp DESC ) = :machine
GROUP BY change.id, part.id
Мне в основном нужен результат с одной ячейкой, который добавит все часы на машину. Результат будет отображен в графическом интерфейсе.
РЕЗУЛЬТАТ ДОЛЖЕН БЫТЬ Машина 1 должна быть 12 часов Машина 2 должна быть 18 часов Машина 3 должна быть 18 часов
ТАБЛИЦЫ
часть
ID | число | Описание | задание |
---|---|---|---|
14 | 40023-10-100-10-03 | База | 40023 |
15 | 40023-10-200-10-03 | База | 40023 |
16 | 40024-10-100-10-01 | скобка датчика | 40024 |
17 | 40024-10-100-10-02 | Сторона | 40024 |
18 | 40025-10-100-10-01 | Удержание конвейера | 40025 |
19 | 40025-10-200-00-01 | Часть | 40025 |
20 | 40026-10-400-00-01 | Монтирование двигателя | 40026 |
21 | 40026-10-200-10-10 | Дельта-рычаги | 40026 |
22 | 40023-10-200-10-03 | База | 40023 |
изменить
ID | кол-во | часов | машина | оператор | Время начала | Время остановки | Завершено | Дата | Временная метка |
---|---|---|---|---|---|---|---|---|---|
14 | 0 | 0 | 2 | 2 | NULL | NULL | False | NULL | 2021-10-28 00:00:00.000 |
15 | 0 | 0 | 4 | 3 | NULL | NULL | False | NULL | 2021-10-28 11:01:41.427 |
19 | 0 | 0 | 3 | 1 | NULL | NULL | False | NULL | 2021-10-28 11:10:50.730 |
18 | 0 | 0 | 2 | 3 | NULL | NULL | False | NULL | 2021-10-28 11:13:46.213 |
16 | 3 | 2.5 | 2 | 2 | NULL | NULL | False | 2021-10-27 | 2021-10-28 13:41:12.393 |
16 | 3 | 2.5 | 2 | 2 | NULL | NULL | False | 2021-10-27 | 2021-10-28 13:41:12.393 |
15 | 1 | 9 | 3 | 3 | NULL | NULL | True | 2021-10-29 | 2021-10-28 21:38:44.883 |
14 | 0 | 0 | 1 | 1 | NULL | NULL | False | NULL | 2021-11-01 10:36:43.223 |
14 | 0 | 0 | 1 | 1 | NULL | NULL | False | NULL | 2021-11-01 10:37:47.153 |
16 | 1 | 0.5 | 2 | 2 | NULL | NULL | False | 2021-11-01 | 2021-11-01 11:12:06.840 |
21 | 0 | 0 | 1 | 1 | NULL | NULL | False | NULL | 2021-11-01 11:45:30.050 |
20 | 0 | 0 | 2 | 3 | NULL | NULL | False | NULL | 2021-11-10 10:44:00.000 |
23 | 0 | 0 | 0 | 0 | NULL | NULL | True | 2021-11-02 | 2021-11-02 16:26:18.583 |
16 | 1 | 1 | 2 | 2 | NULL | NULL | False | 2021-11-01 | 2021-11-01 11:03:44.160 |
17 | 0 | 0 | 2 | 2 | NULL | NULL | False | NULL | 2021-10-28 11:25:03.967 |
17 | 0 | 0 | 1 | 1 | NULL | NULL | False | NULL | 2021-11-01 10:40:36.850 |
17 | 0 | 0 | 1 | 1 | NULL | NULL | False | NULL | 2021-11-01 10:42:56.350 |
22 | 0 | 0 | 3 | 2 | NULL | NULL | False | NULL | 2021-11-02 11:58:08.360 |
17 | 0 | 0 | 1 | 2 | NULL | NULL | False | NULL | 2021-11-01 10:43:44.273 |
14 | 0 | 0 | 1 | 1 | NULL | NULL | False | NULL | 2021-11-01 10:44:23.440 |
14 | 0 | 0 | 1 | 1 | NULL | NULL | False | NULL | 2021-11-02 12:57:06.810 |
change
id | hours | qty | machine | operator | notes | rush | timeStamp |
---|---|---|---|---|---|---|---|
14 | 2 | 3 | 2 | 1 | False | 2021-10-28 10:48:54.910 | |
15 | 10 | 1 | 3 | 2 | False | 2021-10-28 10:49:47.643 | |
16 | 7 | 10 | 2 | 3 | Нужен материал | Верно | 2021-10-28 10:50:33.880 |
17 | 4 | 2 | 1 | 1 | False | 2021-10-28 00:00:00.000 | |
18 | 5 | 1 | 2 | 2 | False | 2021-10-28 10:53:15.470 | |
19 | 8 | 3 | 3 | 3 | False | 2021-10-28 11:10:50.573 | |
14 | 3 | 4 | 1 | 1 | ожидание mills | False | 2021-10-29 08:12:00.000 |
17 | 4 | 2 | 1 | 1 | Верно | 2021-11-01 10:40:36.707 | |
17 | 4 | 2 | 1 | 1 | Верно | 2021-11-01 10:42:56.150 | |
16 | 8 | 10 | 2 | 3 | Нужен материал | False | 2021-11-01 10:43:29.930 |
17 | 4 | 2 | 1 | 2 | False | 2021-11-01 10:43:44.047 | |
14 | 3 | 4 | 1 | 1 | False | 2021-11-01 10:44:23.317 | |
20 | 2 | 4 | 2 | 3 | False | 2021-11-01 11:44:10.257 | |
21 | 5 | 3 | 1 | 1 | Нужен материал | Верно | 2021-11-01 11:45:29.927 |
22 | 10 | 1 | 3 | 2 | False | 2021-11-02 11:58:08.220 | |
14 | 3 | 4 | 1 | 1 | Верно | 2021-11-02 12:57:06.683 | |
14 | 4 | 2 | 1 | 1 | ожидание битов | False | 2021-10-29 00:00:00.000 |
14 | 3 | 4 | 1 | 1 | пришли неправильные мельницы. Необходимо заказать другие | False | 2021-11-01 10:36:42.997 |
14 | 3 | 4 | 1 | 1 | пришли неправильные мельницы. Необходимо заказать другие | False | 2021-11-01 10:37:46.983 |
Комментарии:
1. Было бы здорово, если бы вы вставили в вопрос примеры данных для каждой из таблиц. И ожидаемый результат, который вы должны вставить в виде текста, а не изображения. Таким образом, я уверен, что мы могли бы вам помочь.
2. Я только что сделал.
3. Вы вставили изображения, но вы должны вставить текст, чтобы мы могли скопировать и вставить его. В таблице «Часть» я вижу имена полей, но в двух других я не вижу. Наконец, вы также должны вставить ожидаемые результаты для запроса, пожалуйста. Спасибо
4. Я думаю, у меня есть все, что вам нужно
5. Я не могу вычислить ожидаемые результаты с использованием выборочных данных. Как вы рассчитываете 12 часов для машины 1? Я предполагаю, что вторая таблица «завершена», а не «часть», и у вас есть поле «часы» в обеих таблицах. Ни один из них не суммирует 12 для машины 1. Мне нужно больше объяснений о том, как вы вычисляете ожидаемые результаты, пожалуйста.
Ответ №1:
Ну, я не могу понять, как вы вычисляете ожидаемые результаты, и я уверен, что ваш запрос можно значительно улучшить (если вы лучше объясните свои требования, я могу помочь вам улучшить его). Между тем, этот запрос возвращает то, что вы хотите:
select machine, sum(Hours) Hours from (
SELECT change.machine,
(SELECT TOP 1 change.hours
FROM change WHERE change.id = part.id
ORDER BY change.timeStamp DESC) as 'Hours'
FROM change
INNER JOIN part ON (part.id = change.id)
INNER JOIN completed ON (part.id = completed.id)
WHERE part.id NOT IN (SELECT completed.id FROM completed WHERE completed.completed = 1)
GROUP BY change.id, part.id, change.machine
) as a
group by machine
Возвращает:
машина | Часов |
---|---|
1 | 12 |
2 | 18 |
3 | 18 |
DBFiddle: https://dbfiddle.uk/?rdbms=sqlserver_2019amp;fiddle=80ab33a349388896af3ffcb8954c56c9
Ответ №2:
Отличная работа, Карлос.
Я смог добавить в ваш код, чтобы получить нужные мне результаты
Существует ввод того, какой компьютер отображается. : машина — это входные данные.
SELECT ISNULL((
SELECT sum(Hours)
FROM (SELECT
(SELECT TOP 1 change.hours
FROM change WHERE change.id = part.id
ORDER BY change.timeStamp DESC) as 'Hours'
FROM change
INNER JOIN part ON (part.id = change.id)
INNER JOIN completed ON (part.id = completed.id)
WHERE part.id NOT IN (SELECT completed.id FROM completed WHERE completed.completed = 1)
and (SELECT TOP 1 change.machine FROM change WHERE part.id = change.id ORDER BY change.timeStamp DESC) = :machine
GROUP BY change.id, part.id) as a), 0)
Комментарии:
1. если мой ответ был полезен, не забудьте проголосовать за него и / или пометить его как правильный ответ, пожалуйста