如何转换此表:-
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
使用:
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语法,但是支持有限:
MySQL不支持PIVOT,也不支持SQLite。我不知道PostgreSQL或DB2何时/是否这样做…