Извлечение данных в одну строку из нескольких строк

У меня есть таблица с этими столбцами и данными:

Сид шаг cr_time 120 S02 24 июля 35.08.19.000 120 S03 08 июля 24 35.01.19.000 120 S04 09 июля 24 35.02.19.000 121 S02 09 июля 24 35.09.19.000 121 S03 09 июля 24 35.02.19.000 122 S02 24 июля 10.35.19.000 122 S03 10 июля 24 35.03.19.000

Как я могу получить данные таким образом, чтобы для одного cid существовала только строка и отображалась cr_time для шага ('S02', 'S03') - вот так:

Сид S02_cr_time S03_cr_time 120 24 июля 35.08.19.000 08 июля 24 35.01.19.000 121 09 июля 24 35.09.19.000 09 июля 24 35.02.19.000 122 10 июля 24, 35.10.19.000 10 июля 24 35.03.19.000
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
67
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать технику 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 онлайн

какая польза от min здесь

H Varma 21.07.2024 18:55

Это только один из вариантов. В данном конкретном случае можно использовать любую функцию агрегирования. Просто попробуйте здесь: sqize.online/s/no

Slava Rozhnev 21.07.2024 18:57

У меня есть еще одно условие, при котором 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" ), которые работают, но любой шаг, который удовлетворяет этому требованию, не должен включаться в строку. Но он отображается как нулевой

H Varma 21.07.2024 19:08
sqize.online/sql/oracle23/22fd2bd79a6de38f592e7c225bde00a5 Я обновил условие и мне не нужны здесь нулевые записи. Как этого добиться @Слава Рожнев
H Varma 21.07.2024 19:25

Каков Ваш желаемый результат в этом случае? Пожалуйста, отредактируйте вопрос, добавив это условие и желаемый результат.

Slava Rozhnev 21.07.2024 19:48

Я спросил отдельно. Можете ли вы ответить здесь, если можете stackoverflow.com/questions/78776967/…

H Varma 22.07.2024 06:43

Вы можете использовать этот код 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;

Действительно? Ты только что исправил мое письмо?

Busra Ecem Sakar 30.07.2024 17:26

Другие вопросы по теме