MAK*_*MAK 5 postgresql pivot crosstab postgresql-9.3
我有一个名为的表Product:
create table product (
ProductNumber varchar(10),
ProductName varchar(10),
SalesQuantity int,
Salescountry varchar(10)
);
Run Code Online (Sandbox Code Playgroud)
样本值:
insert into product values
('P1', 'PenDrive', 50, 'US')
, ('P2', 'Mouse', 100, 'UK')
, ('P3', 'KeyBoard', 250, 'US')
, ('P1', 'PenDrive', 300, 'US')
, ('P2', 'Mouse', 450, 'UK')
, ('P5', 'Dvd', 50, 'UAE');
Run Code Online (Sandbox Code Playgroud)
我想Salescountry's动态生成名称并显示该SalesQuantity国家/地区的销售总额。
预期结果:
ProductName US UK UAE
----------------------------
PenDrive 350 0 0
Mouse 0 550 0
KeyBoard 250 0 0
Dvd 0 0 50
Run Code Online (Sandbox Code Playgroud)
我使用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,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);
Run Code Online (Sandbox Code Playgroud)
如何在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);
Run Code Online (Sandbox Code Playgroud)
详细解释:
不同数量的不同的完全动态查询Salescountry?
| 归档时间: |
|
| 查看次数: |
12364 次 |
| 最近记录: |