2016-04-02 6 views
1

Ich habe folgende Daten:SQL-Abfrage verschiedene mit Fall Funktion

ID Owner 
-------- 
01 Sarah 
01 Andrew 
02 Sarah 
03 Andrew 
04 Andrew 
04 Sarah 
05 Andrew 

Und ich mag die folgende Ausgabe erhalten:

ID Grouped_Owners 
--------- 
01 Andrew and Sarah 
02 Sarah 
03 Andrew 
04 Andrew and Sarah 
05 Andrew 

Und ich habe diese Abfrage versucht (und andere Iterationen von ähnlichen Ansätzen):

select 
    distinct(id) 
    , case 
     when count(id) > 1 then 'Andrew and Sarah' 
     else owner 
    end as Grouped_Owners 
from Ads 
group by id, Owner 
order by id 

... aber ich kann nicht zu den Ergebnissen kommen. Ich bin vermutete, dass ich möglicherweise Windowing/Partition-Funktion verwenden muss, aber das scheint übertrieben zu sein. Ich habe in den Interwebs gesucht, aber ich finde nicht, dass etwas passt, das zu diesem Anwendungsfall passt:/

Ich bin mir sicher, dass dies eine sehr schnelle Antwort für die Gurus sein wird! :) Vielen Dank!

+0

'MySQL' oder' Postgresql'? – 1000111

+0

Redshift, meine Entschuldigung. Ich habe gefunden, was ich jetzt brauche: listagg. – Andrew

Antwort

1

Sie müssen GROUP_CONCAT verwenden zusammen mit GROUP BY:

SELECT 
ID, 
GROUP_CONCAT(Owner SEPARATOR ' and ') AS Grouped_Owners 
FROM Ads 
GROUP BY ID 
ORDER BY ID 

Check Demo

+0

Danke für die Anleitung 1000111 :) Sie haben mich auf den richtigen Pfad gesetzt: Es gibt group_concat in MySQL, string_agg in Postgres und listagg in redshift. Ich brauchte die Listagg, aber group_concat funktioniert definitiv auch für meine Zwecke auf mysql. Vielen Dank! :) – Andrew

Verwandte Themen