Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Динамично генерирани заглавия на колони в sql заявка

Виждал съм този проблем с динамично въртене различни пъти. И трябваше да го направя. След много търсене стигнах до решение, което работи чудесно за мен. не е толкова елегантно, но ме спаси. Това, което правя, е първо да подготвя данните във временна таблица, след което динамично създавам обобщения низ (във вашия случай това е DD-MM), като го присвоявам на променлива. И накрая конструирам sql низ, който да се изпълни като динамичен sql .

Използвах вашите примерни данни и изглежда, че работи. Надявам се това да помогне

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Направете while цикъл в SQL Server 2008

  2. NOT IN (подзаявка), генерираща нула редове

  3. Масово вмъкване на милиони записи в SQL Server

  4. Съхранената процедура или функция очаква параметър, който не е предоставен

  5. Как да избягам от знак за процент в T-SQL?