sql >> データベース >  >> RDS >> Sqlserver

ピボット動的列、集計なし

    はい、動的ピボットを実行できます。 PIVOT 最初に静的バージョンを使用してクエリを実行すると、クエリと結果がどのように表示されるかを確認できます。次に、クエリを動的バージョンに変換します。

    以下は、クエリの静的バージョンと動的バージョンの例です:

    静的 (SQL Fiddle ):

    select *
    from 
    (
        select u.userid,
            u.fname,
            u.lname,
            u.mobile,
            r.question,
            r.choice
        from users u
        left join results r
            on u.questionid = r.questionid
            and u.choiceid = r.choiceid
    ) x
    pivot
    (
        min(choice)
        for question in([are you], [from])
    ) p
      

    動的 (SQL Fiddle ):

    DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX)
    
    SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.question) 
                FROM results c
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    set @query = 'SELECT userid, fname, lname, mobile, ' + @cols + ' from 
                (
                    select u.userid,
                        u.fname,
                        u.lname,
                        u.mobile,
                        r.question,
                        r.choice
                    from users u
                    left join results r
                        on u.questionid = r.questionid
                        and u.choiceid = r.choiceid
               ) x
                pivot 
                (
                    min(choice)
                    for question in (' + @cols + ')
                ) p '
    
    
    execute(@query)
      

    現在のテーブル構造といくつかのサンプルデータに関する詳細を提供できる場合。お客様の状況に必要なバージョンの作成をお手伝いできるはずです.

    前述したように、最初に変換する必要がある列をハードコーディングしてから動的バージョンに移行する静的バージョンから始める方が簡単な場合があります。




    1. Rails3.2.6と移行によるデータベースビューの作成

    2. タイムスタンプのフォーマット

    3. ExecuteNonQueryは常にゼロを返します。この0の値を検証のためにコードに使用できますか?

    4. CLOB変数を1行ずつ読み取る