2017-01-11 6 views
-3

Fellow SOers,Postgres: Multiplizieren Spalte der Tabelle A mit Zeilen der Tabelle B

Derzeit bin ich mit dem folgenden Problem fest.

sagen, wir haben Tabelle "Daten" und der Tabelle "Faktor"

"data":

--------------------- 
| col1 | col2  | 
---------------------- 
| foo | 2  | 
| bar | 3  | 
---------------------- 

und Tabelle "factor" (die Menge der Reihen veränderlich ist)

--------------------- 
| name | val  | 
--------------------- 
| f1 | 7  | 
| f2 | 8  | 
| f3 | 9  | 
| ... | ...  | 
--------------------- 

und das folgende Ergebnis sollte wie folgt aussehen:

--------------------------------- 
| col1 | f1 | f2 | f3 | ...| 
--------------------------------- 
| foo | 14 | 16 | 18 | ...| 
| bar | 21 | 24 | 27 | ...| 
--------------------------------- 

Also im Grunde möchte ich die Spalte "col2" mit allen Inhalten von "val" der Tabelle "factor" multipliziert und der Inhalt der Spalte "name" sollte als tableheader/columnname für das Ergebnis dienen.

Wir verwenden postgres 9.3 (ein Upgrade auf eine höhere Version ist möglicherweise möglich), sodass eine erweiterte Suche zu mehreren möglichen Lösungen führte: mithilfe von Kreuztabellen (auch mit Kreuztabellen konnte ich dies nicht ermitteln) mit CTE " Mit "(bevorzugt, aber auch kein Glück). Wahrscheinlich kann dies auch mit der korrekten Verwendung von array() und unnest() geschehen.

Daher wird jede Hilfe dankbar, wie diese zu erreichen (die weniger Code, desto besser)

Tnx im Voraus!

+2

Warum nicht ein Kreuz verbinden und lassen Sie jeden Eintrag in Daten für jede Zeile in Faktor einmal dargestellt werden, wie die Datenbank ausgelegt ist? – coreyward

+2

Mögliches Duplikat von [Erstellen Sie eine Pivot-Tabelle mit PostgreSQL] (http://stackoverflow.com/questions/20618323/create-a-pivot-table-with-postgresql) – GurV

+0

Tnx für die Kommentare. Wenn ich einen einfachen Cross-Join verwende, muss ich immer noch das Resultset transponieren, was im Grunde wieder zu "Kreuztabellen" führt (oder ich missverstehe etwas). Und bezüglich der Kreuztabelle selbst: Wie erwähnt, habe ich keine Möglichkeit gefunden, die Spalten dynamisch zu erzeugen, d. H. Kreuztabelle ($ magic) as (HOW_DO_I_GET_THE_COLS_IN_HERE?) – BePe

Antwort

Verwandte Themen