Конвертировать строку в столбец - PullRequest
2 голосов
/ 13 января 2011

Как я могу преобразовать эту таблицу: -

INV   DESCRIPTION   AMOUNT
--------------------------
1001  CHARGES       100
1001  FREIGHT       30
1001  INSURANCE     20
1002  CHARGES       215
1002  FREIGHT       32
1002  INSURANCE     25

в этот формат с использованием SQL: -

INV   CHARGES  FREIGHT  INSURANCE
---------------------------------
1001  100      30       20
1002  215      32       25

1 Ответ

5 голосов
/ 13 января 2011

Использование:

  SELECT t.inv,
         MAX(CASE WHEN t.description = 'CHARGES' THEN t.amount ELSE NULL END) AS charges,
         MAX(CASE WHEN t.description = 'FREIGHT' THEN t.amount ELSE NULL END) AS freight,
         MAX(CASE WHEN t.description = 'INSURANCE' THEN t.amount ELSE NULL END) AS insurance
    FROM YOUR_TABLE t
GROUP BY t.inv
ORDER BY t.inv

Чтобы поддерживать динамический список описаний, вам нужно указать, для какой базы данных это нужно, поскольку синтаксис динамического SQL для каждого из них различен.

PIVOT / UNPIVOT - это синтаксис ANSI, но поддержка ограничена:

  • SQL Server 2005 +
  • Oracle 11g +

MySQL не поддерживает PIVOT и SQLite. Я не знаю, когда / если PostgreSQL или DB2 делает ...

...