2016-07-11 19 views
0

SQLテーブルを再フォーマットする際に問題が発生しました。 元の表は、以下の形式列アイテムを列アイテムのインデックスに変更するSQL

index1 index2 item1 item2 
    01 001 10 100 
    02 001 10 100 
    ... 
    01 002 20 200 
    02 002 20 200 
    ... 

のようについてことができ、Iは指標1及び指標2は、(主キー以外の任意のインデックスを意味することができる

index2 01item1 01item2 02item1 02item2  ... 
    001  10  100  10  100  ... 
    002  20  200  20  200  ... 
... 

ようなテーブルにそれをフォーマットし直すします例えば、私はそれらを{赤、黄、青}と呼ぶことができ、{四角、丸、棒}の形をとることができ、項目はある種のものを示します(この例では赤丸を言うことができます) (例えば、item1は重みを意味し、dataは80、item2は高さを意味し、データは100など)

私は以下の質問(Efficiently convert rows to columns in sql server)を見てきましたが、私の解決策はそこに存在するはずですが、まだピボットを使用する方法を理解することができないので、それでも解決できないと考えています。 。

インデックス1に存在するインデックスの総数がすべての種類のインデックス2で同じであることを前提とすることは安全です(つまり、001に10のindex1がある場合、002に10のインデックス1よりも同様)

(うまくいけば、それは人々がさらに私の質問については混乱することはありません) ので、最後に、私は、クエリを実行するには次のようになります。

string builder sb = new string builder; 
    foreach(int indexNo2 in index2){ 
     foreach(int indexNo1 in index1{ 
      sb.append("select item1 as" + indexNo1+"item01, item2 as" +indexNo2+"item02 
      where index1 =" + indexNo1 + " and index2 =" + indexNo2 + "inner join"); 
     } 
     sb.append("unit"+endl); 
    } 

しかし、これは私がしたいだけの方法です結果を似たように見せても、私が実際にこのような長いクエリを最終的に作成したいというわけではありません。 PS。私は#クエリを作成するためにACスーツコードを書こうとしましたが、SQLでテーブルのフォーマットを変更するソリューションを探したいのです

+0

を述べたように、私はすでに解決した前に私はあなたが(あなたがこれまでに試みられてきたもの)いくつかのサンプルコードを追加することができ、同じ要件を得ました。ピボットはおそらくそれを行う方法です。しかし、多分非SQL的な方法が良いでしょう(例えば、プログラミング言語Rは溶融コマンドを持っています)。あなたが望むものを理解するのは難しいです... index1とitem1のような用語は、用語の不一致を示唆しています(SQLインデックス?)。インデックス{1}は主キー(またはキー)を意味し、項目{n}は非キーデータを意味しますか?ありがとう。 – ripvlan

+0

アンダースコアは空白を意味するので、そこにスペースを追加するとフォームに違いが表示されません – n4feng

+0

スーツコードを追加します – n4feng

答えて

2

これは、C# ではなく動的ピボットでSQLクエリを使用して達成する必要があります。行を優れたパフォーマンスで列に変換します。

Convert Rows to columns in SQL with simple sample

+0

ありがとう。それはちょうど私が – n4feng

+0

あなたが私の答えをupvoteし、答えとして設定してください探しているものです – DevoWorx

関連する問題