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. 時間の現在の日付のクエリmysql

    2. 自動インクリメントされた行のMySQLREPLACE

    3. 2つの異なるテーブルから金額を追加するOracle

    4. 条件としてサブクエリを使用したMySQLDELETEFROM