我有一个名为Product的表:
create table product ( ProductNumber varchar(10),ProductName varchar(10),SalesQuantity int,Salescountry varchar(10) );
样本值:
insert into product values ('P1','PenDrive',50,'US'),('P2','Mouse',100,'UK'),('P3','KeyBoard',250,('P1',300,450,('P5','Dvd','UAE');
我想动态生成Salescountry的名称,并显示该国家的SalesQuantity销售总额.
预期结果:
ProductName US UK UAE ---------------------------- PenDrive 350 0 0 Mouse 0 550 0 KeyBoard 250 0 0 Dvd 0 0 50
我使用sql Server 2008 R2做到了:
DECLARE @cols AS NVARCHAR(MAX),@query AS NVARCHAR(MAX); SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(SalesCountry) FROM Product FOR XML PATH(''),TYPE ).value('.','NVARCHAR(MAX)'),1,'') set @query = 'SELECT ProductName,' + @cols + ' from ( select ProductName,SalesQuantity as q,Salescountry from Product ) x pivot ( SUM(q) for Salescountry in (' + @cols + ') ) p ' PRINT(@query); execute(@query);
如何在Postgres实现这一目标?
解决方法
SELECT * FROM crosstab ( 'SELECT ProductNumber,ProductName,Salescountry,SalesQuantity FROM product ORDER BY 1',$$SELECT unnest('{US,UK,UAE1}'::varchar[])$$ ) AS ct ( "ProductNumber" varchar,"ProductName" varchar,"US" int,"UK" int,"UAE1" int);
详细说明:
> PostgreSQL Crosstab Query
> Pivot on Multiple Columns using Tablefunc
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。