#sql
Вопрос:
Я хочу выбрать столбец времени безотказной работы для 8-часовой смены, и когда нет производства, я хотел бы показать «NoProduction» в этом выбранном столбце.
Например, Необработанная таблица выглядит так
Время безотказной работы(ч) | Производственный день(0 или 1) | t_stamp(дата и время) | Сдвиг |
---|---|---|---|
1 | 1 | 15 февраля 05:00:00 EST 2021 | Мор |
1 | 1 | 15 февраля 06:00:00 EST 2021 | Мор |
—(так продолжается до 13:00, и значение времени безотказной работы за каждый час равно 1, а производственный день равен 1) | |||
1 | 1 | 15 февраля 13:00:00 EST 2021 | Мор |
0 | 0 | 15 февраля 14:00:00 EST 2021 | На корме |
—(так продолжается до 21:00, и значение времени безотказной работы для каждого часа равно 0, а Production_day равно 0) | |||
0 | 0 | 15 февраля 21:00:00 EST 2021 | На корме |
И я хочу, чтобы результат был таким
Рабочее время | Сдвиг |
---|---|
8 | Мор |
«Непродукция» | На корме |
Вот мой sql-запрос, который я попробовал,
select SUM(case when Production_Day = 1 then Pastry1_1hrUpTime_Minutes else "NoProduction" end) as Uptime, Max(Shift) as Shift
FROM Table
WHERE t_stamp >= FORMAT(getDate()-0,'yyyy-MM-dd 05:00:00') and t_stamp <= FORMAT(getDate()-0,'yyyy-MM-dd 21:00:00')
GROUP BY DATEADD(hh, ((DATEDIFF(hh, 0, t_stamp) 3)/8*8)-4, 0)
Так что кто-нибудь может мне помочь, как использовать sum int и строку в одном и том же операторе select.
Спасибо
Комментарии:
1. помечайте только те СУБД, которые вы используете
2. Суммируйте значения int , приведите сумму к строке, замените строку «0» на «NoProduction», используя
case
3. @nishant, пожалуйста, поделитесь значениями столбцов Pastry1_1hrUpTime_Minutes.
4. @Serg, я использовал приведение и изменил формат на строку, но не смог заменить 0 на «NoProduction». Не могли бы вы, пожалуйста, сказать мне, где я должен разместить заявление по делу? Вот SQL-запрос после вашего предложения. Выберите приведение (((СУММА (в случае, когда Production_Day = 1, затем Pastry1_1hrUpTime_Minutes, еще 0 заканчивается))) в качестве переменной(254)) в качестве времени безотказной работы ,Мин(формат(t_stamp,’дд/ММ/гггг’)) в качестве даты, Макс(Сдвиг) в качестве смены Спасибо за помощь мне.
5. Смотрите ответ. Кстати,
Min(format(t_stamp,'dd/MM/yyyy'))
.. ты имеешь в видуformat(Min(t_stamp),'dd/MM/yyyy')
?
Ответ №1:
При условии Pastry1_1hrUpTime_Minutes
int
, что значение с нулевой суммой будет приведено к «0». Попробуйте
select case when Uptime ='0' then 'NoProduction' else Uptime end Uptime
, -- more columns
from (
select cast(SUM(case when Production_Day = 1 then Pastry1_1hrUpTime_Minutes else 0 end) as varchar(254)) as Uptime
, -- more columns
from ..
) t;
Комментарии:
1. Эй, Серг, я использовал твой запрос, и он сработал. Большое спасибо за помощь. ваше здоровье.
2. Вы можете принять ответ, чтобы показать, что он работает.