Fellow SOers,postgres: Умножающаяся колонка таблицы A с рядами таблицы B
В настоящее время я застрял в следующей задаче.
Скажет, мы имеем таблицу "данные" и таблицы "фактор"
"данные":
---------------------
| col1 | col2 |
----------------------
| foo | 2 |
| bar | 3 |
----------------------
и таблица "фактор" (количество строк является переменным)
---------------------
| name | val |
---------------------
| f1 | 7 |
| f2 | 8 |
| f3 | 9 |
| ... | ... |
---------------------
и следующий результат должен выглядеть следующим образом:
---------------------------------
| col1 | f1 | f2 | f3 | ...|
---------------------------------
| foo | 14 | 16 | 18 | ...|
| bar | 21 | 24 | 27 | ...|
---------------------------------
Так что в основном я хочу, чтобы столбец «col2» был умножен на все содержимое «val» таблицы «factor», а содержимое столбца «name» должно выступать в качестве tableheader/columnname для результата.
Мы используем postgres 9.3 (возможно, возможно обновление до более высокой версии), поэтому расширенный поиск привел к нескольким возможным решениям: использование кросс-таблицы (хотя даже с кросс-таблицей я не смог ее разобрать), используя CTE " С "(желательно, но и не повезло). Вероятно, это также может быть сделано при правильном использовании array() и unnest().
Следовательно, любая помощь приветствуется о том, как достичь этого (чем меньше кода, тем лучше)
TNX заранее!
Почему бы не сделать перекрестное соединение и пусть каждый элемент данных представляется один раз для каждой строки в фактор, как база данных предназначена? – coreyward
Возможный дубликат [Создать сводную таблицу с PostgreSQL] (http://stackoverflow.com/questions/20618323/create-a-pivot-table-with-postgresql) – GurV
Tnx для комментариев. При использовании простого кросс-соединения мне все равно нужно транспонировать набор результатов, что в основном приводит к «кросс-таблице» (или я что-то не понимаю). И в отношении самой кросс-таблицы: Как уже упоминалось, я не нашел способ динамически генерировать столбцы, то есть кросс-таблицу ($ magic), как (HOW_DO_I_GET_THE_COLS_IN_HERE?) – BePe