Оператор case - нельзя вкладывать агрегатные операции

Я получаю сообщение об ошибке -

can not nest aggregate operations when trying to run the below part of the query in Teradata.

Когда SeqCount = 2 и данные операции совпадают с данными первой операции, я хочу, чтобы дата второй операции (SecondSurgery) была равна нулю, иначе возвращались данные второй операции.

Любая помощь будет принята с благодарностью.

SELECT
    pat_id,
    PatientMRN,
    PatientName,
    AdmitDate,
    DischargeDate,
    MIN(case when SeqCount=1 then ORProcName else null end) as FirstProcedure,
    MIN(case when SeqCount=1 then SurgeryDate else null end) as FirstSurgery,
    MIN(case when SeqCount=2 then ORProcName else null end) as SecondProcedure,
    MIN(case when SeqCount=2 and SurgeryDate = FirstSurgery then NULL  else SurgeryDate end) as SecondSurgery

Использование MIN без GROUP BY и при выборе других неагрегированных столбцов не имеет смысла. Пожалуйста, предоставьте образцы данных и ожидаемый результат.

Tim Biegeleisen 09.10.2018 07:36

Вероятно, вам нужна комбинация qualify row_number() over (partition by pat_id order by SurgeryDate) = 1 и lead (или min) over, заменяющая агрегацию

dnoeth 09.10.2018 07:51

Пожалуйста, предоставьте полный запрос, чтобы лучше понять вашу проблему.

Rohan Hodarkar 09.10.2018 10:03

Ваш запрос не имеет вложенных функций агрегирования и является неполным. Покажите (возможно, в упрощенной форме) ваш запрос, который иллюстрирует проблему.

Gordon Linoff 09.10.2018 13:06

Оператор CASE для SecondSurgery ссылается на FirstSurgery, который является агрегацией. Может ли это быть где вы идете боком?

Rob Paller 10.10.2018 02:29
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
5
635
1

Ответы 1

поскольку ErrorMsg сообщает, что это невозможно из-за обработки на основе SET (все сразу). - Вы можете принудительно выполнить последовательную обработку с помощью подзапросов и вычислить SecondSurgery во внешнем SQL.

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