sql >> Databáze >  >> RDS >> Sqlserver

Seřadit sloupce pro dynamické pivotování

Pořadí polí v dynamickém pivotním dotazu můžete upravit přidáním ORDER BY když nastavíte @cols řetězec:

select @cols = STUFF((SELECT distinct ',' + QUOTENAME('Month'+cast(DATEPART(m, [Inv Date]) as varchar(2))) 
                    from #TempTable
                    ORDER BY ....
            FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')

Aktualizace:Chyběl DISTINCT nejprve při použití DISTINCT budete muset použít dílčí dotaz a poté ORDER BY :

SELECT @cols = STUFF((SELECT ',' +   QUOTENAME(ColName) 
                    FROM (SELECT DISTINCT 'Month'+cast(DATEPART(m, [Inv Date]) as varchar(2)) ColName
                          FROM #TempTable
                          )sub
                    ORDER BY ColName
                    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')

Pokud nemůžete jednoduše použít název sloupce a do poddotazu můžete přidat libovolná pole, pokud nenaruší DISTINCT, možná budete muset do poddotazu přidat pole 'sort' seznam. Například:

SELECT @cols = STUFF((SELECT ',' +   QUOTENAME(ColName) 
                    FROM (SELECT DISTINCT 'Month'+cast(DATEPART(m, [Inv Date]) as varchar(2)) ColName
                                          ,CASE WHEN field = 'something' THEN 1
                                                WHEN field = 'something else' THEN 2
                                                ELSE 3
                                           END as Sort
                                          ,Cust_ID
                          FROM #TempTable
                          )sub
                    ORDER BY Sort,Cust_ID
                    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')



  1. Rychlý start migrace databáze pomocí Talend

  2. můžete používat knihovny v PL/Perl

  3. Funkce okna PostgreSQL:row_number() over (pořadí sloupců oddílu podle sloupce2)

  4. Chyba protokolu PostgreSQL. Nastavení relace se nezdařilo... chyba