0

以下のようなピボット ステートメントを設定したいのですが、列の値を渡す代わりに、すべてを返すようにしたいだけです。一番下の括弧を空のままにしたい (つまり、Sum(fldNI) FOR fldCI IN ( )...

SELECT * 
    FROM    
(
    SELECT fldPK
          ,fldFPK
          ,fldNI
          ,fldCI
    FROM qryOne 
) as x
PIVOT
(
    Sum(fldNI) FOR fldCI IN ()
) as p
4

1 に答える 1

0

PIVOT 関数を使用している場合、値を列に変換するには、値を知っている必要があります。事前に値がわからない場合は、動的 SQL を実装して結果を取得する必要があります。動的 SQL コードは、列に変換される値のリストを作成します。このリストは、実行されるクエリ文字列に連結されます。

コードは次のようになります。

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(fldCI) 
                    from qryOne
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT fldPK, fldFPK, ' + @cols + ' 
            from 
            (
               SELECT fldPK
                    ,fldFPK
                    ,fldNI
                    ,fldCI
              FROM qryOne 
            ) x
            pivot 
            (
                sum(fldNI)
                for fldCI in (' + @cols + ')
            ) p '

execute sp_executesql @query
于 2013-08-20T19:34:42.310 に答える