Ich habe eine Tabelle 1 unten dargestelltlistagg in SQL zu Gruppenzeilen in einer Zeile
Name role F1 status1 status 2
sam player yes null null
sam admin yes null null
sam guest no x x
möchte ich das Ergebnis
Name role status1 status 2
sam admin,player x x
i eine Abfrage gemacht haben, um die Rolle list_agg in einem row.but der Status ist für sam null, wenn F1 zu zeigen = 'yes' i
Abfrage
select name,list_agg(role,',') within group(order by name),max(status1),max(status2)
from table 1 where F1='yes'
group by name
verwendet
aber ich bekomme so etwas wie dieses
name role status1 status2
sam admin,player null null
i das, wo wollen nur auf Rolle Spalte arbeiten und die max (status1) in status1 zu mir ie'x'.please helfen .thank Sie
Gibt es etwas, was Sie uns nicht sagen? Ich wäre sehr überrascht, wenn Sie beim Ausführen Ihrer Abfrage keine Fehlermeldung erhalten würden. Sie gruppieren nach Namen, aber versuchen, nicht aggregierte Felder anzuzeigen, z. B. "Wasserzugang" und nicht "Min. (Wasserzugang)" oder "Max. Wasserzugang" oder Ähnliches. –
@ ThorstenKettner.sry ich habe das update the question.please help me –
Verwenden Sie die Abfrage von Tim. Ersetzen Sie 'LISTAGG (Role, ',')' durch 'LISTAGG (CASE WHEN F1 = 'ja' THEN Role END, ',')', um Rollen nur dann der Zeichenfolge hinzuzufügen, wenn F1 ja ist. –