2012-04-20 4 views
3

私は、次の表を持っている場合:メンバー(森?)単一のテーブルに

Member_Key Member_Name    col1 Mem1 col2 Mem2 col3 Mem3 col4 Mem4 
----------------------------------------------------------------------------------------------- 
31   100.00 - Some Account 9  Rollup1 268  Rollup2 246  Rollup3 238 Rollup4 
31   100.00 - Some Account 270  Rollup5 271  Rollup6 NULL NULL NULL NULL 
31   100.00 - Some Account 283  Rollup7 NULL NULL NULL NULL NULL NULL 

所望の出力は次のようになります。

Member_Key Member_Name col1 mem1 col2 mem2 col3 mem3 col4 mem4 col5 mem5 col6 mem6 col7 mem7 

私はこれはで行わ取得しようとしてきました1のアカウントを使用して、y個のロールアップを持つx個のアカウントに対して動的にして、1つの可変列結果にするようにすることはできますが、PIVOTまたはSELECT CASEを使用してこれを動作させることはできません。どんなヘルプやリンクも大歓迎です。

+0

あなたは私たちに多くの情報を与えることができます。私は 'member_key'と' member_name'が1つのテーブルから来ていると推測しています。 colxとmemxの列は、最初の列にリンクする別の表からですか?最初のテーブルにcol1、mem1、col2、mem2、...、colc、memnがある場合、なぜピボットが必要でしょうか? – Kyra

+0

SSISを使用して、階層情報を2つのテーブルに分割しました.1つは実際の階層(親と子)、次にアカウント自体のリストです。 colxとmemxの列は階層テーブルから来ています。そこでは、階層のパスを取得するために、(sqlserverbible.com ch.18で)マテリアライズされたパス関数を使用しました。この例では、簡単にするために1つのアカウントを使用しました。ただし、実際の表では、階層にさまざまなレベルのアカウントが多数存在します。最終的なテーブルは必ずしも7つのカラムを持つわけではありません。私はそれを動的にするためにピボットを使用しようとしていました。 – Tom

+0

実際、ch.17 ... http://sqlserverbible.com/files/sqlserver2008bible_ch17.pdfです。私はマテリアライズされたパス(文字列、 '2,54,220')をとり、スクリプトコンポーネントを使用して数値を解析します。上記の元の例の表は、スクリプトコンポーネントの出力がアカウントのリストを持つテーブルに結合された結果です(名前と必要な他のメタデータを取得するため)。 – Tom

答えて

0

私は、クエリの下にあなたの答えであることを願っています:

SELECT * 
From 
    (SELECT A.Member_Key, 
      A.Member_Name, 
      CASE B.n 
       WHEN 1 THEN A.Mem1 
       WHEN 2 THEN A.Mem2 
       WHEN 3 THEN A.Mem3 
       WHEN 4 THEN A.Mem4 
      END AS Mem, 
      CASE B.n 
       WHEN 1 THEN A.Col1 
       WHEN 2 THEN A.Col2 
       WHEN 3 THEN A.Col3 
       WHEN 4 THEN A.Col4 
      END AS Col 
     FROM MyTable A 
     CROSS JOIN (SELECT 1 
      UNION SELECT 2 
      UNION SELECT 3 
      UNION SELECT 4)B(n) 
    )AS p 
PIVOT (MIN(Col) FOR Mem IN ([Rollup1], [Rollup2], [Rullup3], [Rollup4], [Rollup5], [Rullup6], [Rullup7])) AS Pvt 
関連する問題