У меня есть таблица с этими столбцами и данными:
Как я могу получить данные таким образом, чтобы для одного cid
существовала только строка и отображалась cr_time
для шага ('S02', 'S03') - вот так:
Вы можете использовать технику PIVOT
здесь. Разворот можно выполнить с помощью GROUP BY
и некоторой функции агрегирования (MIN
в следующем примере) с условием внутри:
select
cid,
min(case when step = 'S02' then cr_time end) S02_time,
min(case when step = 'S03' then cr_time end) S03_time
from t
group by cid;
Попробуйте SQL онлайн
Это только один из вариантов. В данном конкретном случае можно использовать любую функцию агрегирования. Просто попробуйте здесь: sqize.online/s/no
У меня есть еще одно условие, при котором cr_time должно быть только между 8:30 и 16:30. Условие должно удовлетворять для обоих шагов S02, S03, тогда должна быть включена только эта запись. Я использовал это условие (CAST (cr_time as TIME) >= "8:30 00 AM" и CAST (cr_time as TIME) <= "16:30 00 PM" ), которые работают, но любой шаг, который удовлетворяет этому требованию, не должен включаться в строку. Но он отображается как нулевой
Каков Ваш желаемый результат в этом случае? Пожалуйста, отредактируйте вопрос, добавив это условие и желаемый результат.
Я спросил отдельно. Можете ли вы ответить здесь, если можете stackoverflow.com/questions/78776967/…
Вы можете использовать этот код SQL,
SELECT
cid,
MAX(CASE WHEN step = 'S02' THEN cr_time END) AS S02_cr_time,
MAX(CASE WHEN step = 'S03' THEN cr_time END) AS S03_cr_time
FROM
your_table_name
GROUP BY
cid;
Действительно? Ты только что исправил мое письмо?
какая польза от min здесь