sql >> Databasteknik >  >> RDS >> Sqlserver

Dynamiskt genererade kolumnrubriker i sql-fråga

Jag såg det här dynamiska pivotproblemet olika gånger. Och jag var tvungen. Efter att ha letat mycket kom jag fram till en lösning som fungerar utmärkt för mig. det är inte så elegant men det räddade mig. Vad jag gör är att först förbereda data i en temporär tabell, efter det skapar jag dynamiskt pivotsträngen (i ditt fall är det DD-MM) och tilldelar den till en variabel. Och till slut konstruerar jag en sql-sträng som ska köras som dynamisk sql .

Jag använde dina exempeldata och det verkar fungera. Hoppas detta hjälper

select 
    userid,
         browsername, 
         CAST(day(logintime) as nvarchar(2)) + '-' + CAST(Month(logintime) AS nVARCHAR(2))  AS period  
INTO #TMP
from user_log_table order by 1

DECLARE @cols AS NVARCHAR(MAX), @query  AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' 
                    + QUOTENAME(convert(varchar(10), period, 120)) 
                from #TMP order by 1
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')

set @query = 'SELECT userid, browsername,' + @cols + ' from 
         (
            select userid, browsername, period
            from #TMP
        ) x
        pivot 
        (
            count(period)
            for period in (' + @cols + ')
        ) p '
exec(@query)
drop table #TMP


  1. Runtime Warning i django

  2. MySQL LIMIT-sats motsvarande för SQL SERVER

  3. Få resultat mellan två datum i PostgreSQL

  4. Kontrollera/ändra kompatibilitetsnivån för en databas i SQL Server (SSMS)