Использование Group by для суммирования значения int и строки

#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. Вы можете принять ответ, чтобы показать, что он работает.