sql >> Database >  >> RDS >> Sqlserver

Dynamisch gegenereerde kolomkoppen in sql-query

Ik heb dit dynamische spilprobleem verschillende keren gezien. En ik moest het. Na veel zoeken kwam ik tot een oplossing die voor mij prima werkt. het is niet zo elegant, maar het heeft me gered. Wat ik doe is eerst de gegevens voorbereiden in een tijdelijke tabel, daarna maak ik dynamisch de pivot-string (in jouw geval is het DD-MM) en wijs deze toe aan een variabele. En uiteindelijk bouw ik een sql-string om uit te voeren als dynamische sql .

Ik heb uw voorbeeldgegevens gebruikt en het lijkt te werken. Ik hoop dat dit helpt

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. Hoe gewijzigde gegevens in de database bijwerken met behulp van JTable?

  2. Hoe een PDF-bestand op te slaan in de MySQL-database?

  3. Ruwe SQL uitvoeren tijdens migratie

  4. Wat zijn de beperkingen van MS Access?