sql >> Databáze >  >> RDS >> Sqlserver

Dynamicky generované nadpisy sloupců v dotazu SQL

Tento problém s dynamickým pivotem jsem viděl různě. A měl jsem na to. Po dlouhém hledání jsem došel k řešení, které mi skvěle funguje. není to tak elegantní, ale zachránilo mě to. Nejprve připravím data v dočasné tabulce, poté dynamicky vytvořím pivotní řetězec (ve vašem případě je to DD-MM) a přiřadím jej k proměnné. A nakonec zkonstruuji řetězec sql, který se spustí jako dynamický sql .

Použil jsem vaše ukázková data a zdá se, že to funguje. Doufám, že to pomůž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. Dotazování Postgresql pomocí Hibernate (JPA) nenajde tabulku

  2. Jak replikovat schéma se stejnými oprávněními jako stávající účet v oracle?

  3. Python pymySQL odesílá řetězec s uvozovkami

  4. Nastavení hodnoty pro jeden sloupec všech záznamů v tabulce