7

次を含むテーブルで動的ピボット クエリに取り組んでいます。

  • OID - オーダーID
  • サイズ - 商品のサイズ
  • BucketNum - サイズの順序
  • 数量 - 注文数

size 列には、OID に応じて異なるサイズが含まれます。

したがって、ここにあるコードを使用して、これをまとめました。

DECLARE @listCol VARCHAR(2000)
DECLARE @query VARCHAR(4000)

SELECT  @listCol = STUFF(( SELECT distinct  '], [' + [size]
                           FROM     #t
                         FOR
                           XML PATH('')
                         ), 1, 2, '') + ']'


SET @query = 'SELECT * FROM
      (SELECT OID,  [size], [quantity]
            FROM #t 
            ) src
PIVOT (SUM(quantity) FOR Size
IN (' + @listCol + ')) AS pvt'


EXECUTE ( @query )

これは、列ヘッダー (サイズ ラベル) が bucketnum 列に基づく順序になっていないことを除いて、うまく機能します。サイズ順に並んでいます。

ピボット後にオプションの Order By を試しましたが、うまくいきません。

列が表示される順序を制御するにはどうすればよいですか?

ありがとうございました

4

4 に答える 4

11

これを修正する必要があります:

SELECT  @listCol = STUFF(( SELECT distinct  '], [' + [size]
                           FROM     #t
                         FOR
                           XML PATH('')
                         ), 1, 2, '') + ']'

正しい順序で列を返すため。あなたは使用する代わりにこのようなことをしなければならないかもしれませんDISTINCT

SELECT [size]
FROM     #t
GROUP BY [size]
ORDER BY MIN(BucketNum)
于 2009-07-13T21:25:18.463 に答える
0

私は同じ問題を抱えていて、上記の解決策を試しましたが、おそらく私の理解レベルのために、それを機能させることができませんでした. 簡単なハックは、Order by ステートメントを使用して列ヘッダーが正しく並べられた一時テーブルを作成し、そのリストを動的ピボット クエリの列名を設定する変数にプルすることであることがわかりました。

例えば

SELECT WeekNum INTO #T3 
FROM #T2 
GROUP BY WeekNum 
ORDER BY MIN(WeekNum) 

SELECT @ColumnName1 = ISNULL(@ColumnName1 + ',','') + QuoteName(WeekNum) 
FROM (SELECT WeekNum From #T3) AS WeekNum

御馳走を働いた。

それが誰かを助けることを願っています。

于 2014-07-23T09:52:15.587 に答える