2016-12-20 4 views
0

i Benutzertabelle habe, die zwei Spalten Benutzer- und Gruppen haben, ein Anwender mehrere GruppenOracle SQL Query Vertikal mit Fall horizontal

User | Group 
-------------- 
User1 | Group1 
User1 | Group2 
User2 | Group1 
User2 | Group2 
User3 | Group1 
User4 | Group2 

ich SQL zu schreiben versuchen hat über Tabellendaten in folgendem Format konvertieren .

User | Group1  | Group2 
--------------------------------- 
User1 | Yes   | Yes 
User2 | Yes   | Yes 
User3 | Yes   | No 
User4 | No   | Yes 

Brauchen Sie Hilfe. Dank

+4

Haben Sie versucht, die Abfrage zu schreiben, um das Ergebnis zu erhalten? Sie sollten die Frage mit Ihren Versuchen bearbeiten. – Taryn

+0

@krokodilko ja das funktioniert dank – niting

Antwort

0

Ich glaube, Sie dies mit CASE und Gruppierung tun können:

SELECT user, 
CASE WHEN MIN(`group`) = 'Group1' THEN 'Yes' ELSE 'No' END AS Group1, 
CASE WHEN MAX(`group`) = 'Group2' THEN 'Yes' ELSE 'No' END AS Group2 
FROM t 
GROUP BY user 
+1

Das war nicht im Beispiel enthalten. Wahrscheinlich eine Follow-up-Frage an das OP statt einer Down-Abstimmung auf eine Antwort ... – kbball

0

Try this:

select usr, 
max(case when grp = 'Group1' then 'Yes' else 'No' end) grp1, 
max(case when grp = 'Group2' then 'Yes' else 'No' end) grp2 
from table 
group by usr; 

P. S .: Vermeiden Sie Schlüsselwörter wie USER in Ihren Tabellen.

+0

Dies entspricht nicht die Voraussetzung vollständig - die OP-Ausgabe zeigt "No" anstelle von "NULL", wenn die Gruppe nicht gefunden wird für diesen Benutzer. – mathguy

+0

@mathguy Danke. – GurV

0
with 
    test_data (usr , grp) as (
     select 'User1', 'Group1' from dual union all 
     select 'User1', 'Group2' from dual union all 
     select 'User2', 'Group1' from dual union all 
     select 'User2', 'Group2' from dual union all 
     select 'User3', 'Group1' from dual union all 
     select 'User4', 'Group2' from dual 
    ) 
-- end of test data; the query begins below this line 
select usr, 
     case when count(case when grp = 'Group1' then 1 end) > 0 
       then 'Yes' else 'No' end as grp1, 
     case when count(case when grp = 'Group2' then 1 end) > 0 
       then 'Yes' else 'No' end as grp2 
from  test_data 
group by usr 
order by usr -- order by is optional 
; 

USR GRP1 GRP2 
----- ---- ---- 
User1 Yes Yes 
User2 Yes Yes 
User3 Yes No 
User4 No Yes