sql >> Database teknologi >  >> RDS >> Sqlserver

Sorter kolonner for dynamisk pivot

Du kan justere rækkefølgen af ​​felterne i en dynamisk pivotforespørgsel ved at tilføje en ORDER BY når du indstiller din @cols streng:

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

Opdatering:Gik glip af DISTINCT først, når du bruger DISTINCT du skal bruge en underforespørgsel og derefter 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,'')

Du skal muligvis tilføje et "sorteringsfelt" i din underforespørgsel, hvis du ikke blot kan bruge kolonnenavnet, og du kan tilføje alle felter til underforespørgslen, så længe de ikke forstyrrer DISTINCT liste. For eksempel:

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. Har replace into en where-klausul?

  2. SQL Indfyld tabel med tilfældige data

  3. PHP 7 kan ikke finde MySQLi

  4. Knyt kolonnedata til en værdi (Oracle)