Использование:
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 делает ...