Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dynamicznie generowane nagłówki kolumn w zapytaniu sql

Różne razy widziałem ten problem z dynamiczną osią obrotu. I musiałem to zrobić. Po wielu poszukiwaniach doszedłem do rozwiązania, które działa dla mnie świetnie. to nie jest takie eleganckie, ale mnie uratowało. To, co robię, to najpierw przygotowuję dane w tabeli tymczasowej, a następnie dynamicznie tworzę ciąg osi (w twoim przypadku jest to DD-MM) przypisując go do zmiennej. Na koniec konstruuję ciąg sql do wykonania jako dynamiczny sql .

Użyłem twoich przykładowych danych i wydaje się, że działa. Mam nadzieję, że to pomoże

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. Zastąpić domyślną alfabetyczną wartość ORDER BY za pomocą UNION z 2+ tabel?

  2. Pobieranie błędu automatycznego tworzenia pliku bazy danych SQLExpress dla witryny korzystającej z programu AspNetSqlMembershipProvider, ale ciąg połączenia jest z programem SQL Server 2005

  3. Jak mogę sprawdzić poprawność danych przed wstawieniem/aktualizacją za pomocą programu SQL Server?

  4. procedury składowane z sqlAlchemy

  5. Połącz się z bazą danych MSSQL za pomocą Flask-SQLAlchemy