Dynamische pivot-Abfrage, die mit PostgreSQL 9.3

Ich habe eine Tabelle namens als Product:

create table product (
    ProductNumber varchar(10),
    ProductName varchar(10),
    SalesQuantity int,
    Salescountry varchar(10)
);  

Beispiel-Werte:

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');   

Möchte ich generieren die Salescountry's Namen dynamisch und zeigen die Summe der SalesQuantity den Verkauf in diesem Land.

Erwartete Ergebnis:

ProductName US    UK    UAE
----------------------------
PenDrive    350   0     0
Mouse       0     550   0
KeyBoard    250   0     0
Dvd         0     0     50

Ich habe es mit 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);

Wie Sie diese erreichen in Postgres?

was ist mit diesem select productname,case when salescountry ='US' then qty else 0 end as "US" ,case when salescountry ='UAE' then qty else 0 end as "UAE" ,case when salescountry ='UK' then qty else 0 end as "UK" from ( select productname,sum(salesquantity) qty,salescountry from Product group by productname,salescountry )y
Panther Case ist nicht ein guter Rat für die dynamische Abfrage.
Panther, das ist das problem, ich bin mit hier. Im SQL Server habe ich mit Stuff.
Check dieser
Ein Wort der Warnung: Der code in dem verlinkten blog nicht entgehen Bezeichner, die Pausen mit nicht-standard-Namen und erlaubt SQL-Injektion.

InformationsquelleAutor MAK | 2015-01-22

Schreibe einen Kommentar