SORU
1 Mayıs 2012, Salı


Dinamik PİVOT sorgu?SQL Server

Aşağıdaki veri çeviri aracı ile geliyor görevli oldum:

date        category        amount
1/1/2012    ABC             1000.00
2/1/2012    DEF             500.00
2/1/2012    GHI             800.00
2/10/2012   DEF             700.00
3/1/2012    ABC             1100.00

aşağıdaki:

date        ABC             DEF             GHI
1/1/2012    1000.00
2/1/2012                    500.00
2/1/2012                                    800.00
2/10/2012                   700.00
3/1/2012    1100.00

Boş kalan yerleri Boşluk veya boşluklar olabilir, her ikisi de olur, ve kategoriler dinamik olması gerekir. Bunun için başka bir olası uyarı temp tablolar, yani sınırlı bir kapasite, sorgu çalışıyor olacağız. Araştırma ve PİVOT üzerinde durduğu için denedim ama daha önce hiç kullanmadım gibi gerçekten, bunu anlamak için tüm çabalarıma rağmen anlamadım. Herkes doğru yönde bana gelin miyim?

CEVAP
1 Mayıs 2012, Salı


Dinamik SQL PİVOT:

create table temp
(
    date datetime,
    category varchar(3),
    amount money
)

insert into temp values ('1/1/2012', 'ABC', 1000.00)
insert into temp values ('2/1/2012', 'DEF', 500.00)
insert into temp values ('2/1/2012', 'GHI', 800.00)
insert into temp values ('2/10/2012', 'DEF', 700.00)
insert into temp values ('3/1/2012', 'ABC', 1100.00)


DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ','   QUOTENAME(c.category) 
            FROM temp c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT date, '   @cols   ' from 
            (
                select date
                    , amount
                    , category
                from temp
           ) x
            pivot 
            (
                 max(amount)
                for category in ('   @cols   ')
            ) p '


execute(@query)

drop table temp

Sonuçlar:

Date                        ABC         DEF    GHI
2012-01-01 00:00:00.000     1000.00     NULL    NULL
2012-02-01 00:00:00.000     NULL        500.00  800.00
2012-02-10 00:00:00.000     NULL        700.00  NULL
2012-03-01 00:00:00.000     1100.00     NULL    NULL

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Official Android Tips

    Official And

    23 EYLÜL 2009
  • Jordie Jordan

    Jordie Jorda

    27 Ocak 2008
  • FusioNGamiing

    FusioNGamiin

    10 Temmuz 2007