Я хотел бы сделать запрос в базе данных postgres, чтобы получить значения в следующем формате. Таблица данныхКак выполнить вложенный запрос с использованием case
Name SEQ CODE alert a alert b alert c
1001 1564948409 1527643 Yes No No
1001 1564948409 642270 Yes No No
1003 1565646958 642270 No Yes No
1004 1565484758 1359527 Yes No No
1004 1565484758 502847 Yes No No
я сгруппировал имя, последовательность, Alerta, alertb, alertc используя случай.
Select name,
count(distinct seq),
sum(case when alerta='Yes' then 1 else 0 end),
sum(case when alertb='Yes' then 1 else 0 end),
sum(case when alertc='Yes' then 1 else 0 end)
From work_itemlist
group by name
order by name
Теперь проблема в том, что я получаю поля предупреждений в виде суммы на основе элементов. Я хотел бы основываться на разных документах.
Теперь я получаю как
Name seq alerta alertb alert c
1001 1 2 0 0
1003 1 0 1 0
1004 1 2 0 0
Но я хочу, как
Name seq alerta alertb alert c
1001 1 1 0 0
1003 1 0 1 0
1004 1 1 0 0
Я попытался в следующий путь
Select name,
count(distinct seq),
sum(case when alerta='Yes' then count(distinct seq) else 0 end),
sum(case when alertb='Yes' then count(distinct seq) else 0 end),
sum(case when alertc='Yes' then count(distinct seq) else 0 end)
From work_itemlist
Group by name
Order by name
Но я получил ошибку синтаксиса говоря
агрегатные вызовы функций не могут быть вложенными
Nope. Вы не понимали моего требования. Сожалею. Я хотел бы иметь различные значения, основанные на документе. Скажем, например, в порядке есть два кода, и если какой-либо один код или все коды имеют Да, тогда я должен получить результат как 1 else, я должен получить 0. В настоящее время мой запрос возвращает 2 вместо 1 –
@ KathirvelAppusamy .. вы пробовали это вообще? это даст вам точный результат по мере необходимости. –
Да. Это даст, но я этого не ожидал. Я приложил вышеуказанные данные к образцу, чтобы понять. На самом деле у меня будет много номеров для имени, в этом случае он всегда будет возвращать 1, он не будет возвращать фактический отчетный счет. Например, если имя 1005, имеющее 5 записей и среди 5, 3, является отличным, я должен получить 3. Ваш запрос вернется 1. Его не так, как ожидалось –