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

Dynamisk genererede kolonneoverskrifter i sql-forespørgsel

Jeg så dette dynamiske pivotproblem forskellige gange. Og det måtte jeg. Efter at have søgt meget kom jeg frem til en løsning, der fungerer godt for mig. det er ikke så elegant, men det reddede mig. Det, jeg gør, er først at forberede dataene i en midlertidig tabel, derefter opretter jeg dynamisk pivotstrengen (i dit tilfælde er det DD-MM) og tildeler den til en variabel. Og til sidst konstruerer jeg en sql-streng, der skal udføres som dynamisk sql .

Jeg brugte dine prøvedata, og det ser ud til at virke. Håber dette 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. Vil du slette flere rækker ved hjælp af id'er?

  2. Sammenligning af almindelige databaseinfrastrukturmønstre

  3. Kan jeg indstille (inden for dbasen) en størrelsesgrænse på et bytea-felt i PostgreSQL?

  4. visning af flere poster ved hjælp af resultatsæt