MySQL或Postgres中的数据透视表

时间:2015-12-03 00:34:22

标签: mysql sql postgresql pivot-table

1 个答案:

答案 0 :(得分:2)

示例数据:

create table test (
    custname text, 
    computer numeric, 
    monitor numeric, 
    software numeric);

insert into test values
('Alison', 345.89, 123.45, 78.78),
('Jason', 435.34, 158.23, 243.54);

查询:

select 
    custname "Customer", 
    unnest(array['Computer', 'Monitor', 'Software']) "Item type",
    unnest(array[computer, monitor, software]) "Amount"
from test;

 Customer | Item type | Amount 
----------+-----------+--------
 Alison   | Computer  | 345.89
 Alison   | Monitor   | 123.45
 Alison   | Software  |  78.78
 Jason    | Computer  | 435.34
 Jason    | Monitor   | 158.23
 Jason    | Software  | 243.54
(6 rows)

如果unnest()不可用,您可以使用union

select custname "Customer", 'Computer' "Item type", computer "Amount" from test
union select custname, 'Monitor', monitor from test
union select custname, 'Sofware', software from test
order by 1, 2;