2017-04-10 4 views
-1

Ich bin mit presto dbdynamischen binären Spalten in SQL-Abfrage

ich zwei Tabellen haben, sieht aus wie:

Tabelle 1:

item count 
p1  20 
p2  10 
p3   5 
p4   4 
p5   2 

und Tabelle 2:

person  lic 
c1    p2 
c1    p1 
c2    p3 
c2    p4 
c2    p2 
c3    p1 
c4    p2 

Ich möchte eine Tabelle zurückgeben, die wie folgt aussieht:

person  p1 p2 p3 p4 p5 

c1   1  1  0 0 0 
c2   0  1  1 1 0 
c3   1  0  0 0 0 
c4   0  1  0 0 0 
c5   0  0  0 0 0 

Es sieht aus wie ein Dreh tun würde, aber im nicht sicher, wie für fehlende Werte in der Spalte Konto und erhalten sie in der letzten Tabelle für eine SQL-Abfrage

+0

Verwenden Sie 'count()'? Wenn ja, wird es das schon tun ... – JohnHC

+0

@JohnHC ich benutze zählen wo? – dimebucker91

+0

Wo genau ist die "dynamische" und "binäre" in dieser Frage? –

Antwort

1

Das Ausgabeschema ‚0‘ sein muss repariert sein. Wenn also eine Spalte p1 in der Ausgabe erscheinen soll, muss sie explizit in der Abfrage aufgeführt werden.

Ich bin nicht sicher, wie table1 mit dem Ausgang verbunden ist, aber Sie können eine Pivot wie folgt tun:

SELECT person 
, count_if(lic = 'p1') p1 
, count_if(lic = 'p2') p2 
... 
FROM table2 
GROUP BY person 

Die Abfrage muss jede p Spalte aufzulisten. Abhängig von Ihrer Anwendung können Sie die Abfrage möglicherweise programmgesteuert generieren, indem Sie zunächst eine Abfrage ausführen, um die eindeutigen Werte abzurufen.

+0

Gibt es eine Möglichkeit, dies zu tun, ohne alle Spalten manuell zu schreiben? das war, was ich zu vermeiden versuchte – dimebucker91

+0

Tabelle 1 ist da, weil ich alle Zeilen in Tabelle 1 in der Final Table vorhanden sein muss, eine Person wie c3 hat keine Zeile für p2, aber ich will immer noch, dass das angezeigt wird in der letzten Tabelle – dimebucker91

Verwandte Themen