3

基本的に私がやろうとしているのは、他のすべての列を、次の列データを横に持つ行に転置することです。

ソースには、最大 1,000 行、数百万行までの 2 つの列のみを含めることができます。私はこれを行ごとにのみ行っています。「UNION ALL」を試してみましたが、大きなテーブルで何百もの列を処理する場合、これは非常に遅くなります。

考えられる解決策はUNPIVOTを使用することですが、私が見つけることができるすべての例は、私が望むものとは異なることをしています。

例: クエリの前

Columns...
Apple | Apple Data | Banana | Banana  Data | Cranberry | Cranberry  Data | .... 

Data Returned... 
IOWA_PL_RLA | 1 | IOWA_PL_MATH | 1 | IOWA_SS_RLA 684 .....

例: クエリの後

MeasureID  Score
CRCT_PL_RLA   | 1 
CRCT_PL_MATH  | 1 
CRCT_SS_RLA   |684 
.....

私は T-SQL の経験が中程度しかないので、誰かが助けることができるように十分に説明したことを願っています。さらに情報が必要な場合は、お知らせください。

4

1 に答える 1

13

SQL Server 2008 を使用している場合は、CROSS APPLY (VALUES) 手法の使用を検討する必要があると思います。

http://www.sqlservercentral.com/articles/CROSS+APPLY+VALUES+UNPIVOT/91234/

基本的には、次のようになります。

SELECT
  x.NewColumn1,
  x.NewColumn2
FROM YourTable t
CROSS APPLY (
    VALUES
        (t.OldColumn1, t.OldColumn2),
        (t.OldColumn3, t.OldColumn4),
        ...
) x (NewColumn1, NewColumn2);

実行可能な例を次に示します: http://sqlfiddle.com/#!3/9a9d2/5/0

于 2012-11-27T21:48:07.700 に答える