2017-01-11 1 views
-3

Fellow SOers,postgres: Multiplier la colonne de la table A avec les lignes de la table B

Actuellement, je suis bloqué avec le problème suivant.

Disons que nous avons la table des "données" et une table "facteur"

"data":

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

et une table "facteur" (le nombre de lignes est variable)

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

et le résultat suivant devrait ressembler à ceci:

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

Donc, fondamentalement, je veux que la colonne "col2" multiplié avec tout le contenu de "val" de la table "facteur" ET le contenu de la colonne "nom" devrait agir comme tableheader/columnname pour le résultat. Nous utilisons postgres 9.3 (la mise à niveau vers une version supérieure est peut-être possible), donc une recherche étendue a abouti à plusieurs solutions possibles: en utilisant crosstab (même si avec crosstab je n'ai pas pu le comprendre), en utilisant CTE " Avec "(préféré, mais aussi pas de chance). Probablement cela peut également être fait avec l'utilisation correcte de array() et unnest().

Par conséquent, toute aide est appréciée sur la façon d'atteindre cet objectif (le code moins, mieux)

Tnx à l'avance!

+2

Pourquoi ne pas faire une jointure croisée et que chaque entrée dans les données représenté une fois pour chaque ligne de facteur, comme la base de données est conçue? – coreyward

+2

Copie possible de [Créer un tableau croisé dynamique avec PostgreSQL] (http://stackoverflow.com/questions/20618323/create-a-pivot-table-with-postgresql) – GurV

+0

Tnx pour les commentaires. Lorsque j'utilise une simple jointure croisée, j'ai encore besoin de transposer le jeu de résultats, ce qui mène à nouveau à un "tableau croisé" (ou je ne comprends pas quelque chose). Et en ce qui concerne le tableau croisé lui-même: Comme mentionné, je n'ai pas trouvé un moyen de générer dynamiquement les colonnes, c'est-à-dire crosstab ($ magic) comme (HOW_DO_I_GET_THE_COLS_IN_HERE?) – BePe

Répondre