0

5列の結果を生成する関数があります(たとえば、10行)。

このデータは Key-Value テーブルに挿入されるため、挿入用に 50 行の形式にする必要があります。

現時点では、各列を 5 回選択し、結果を結合しています。同じクエリが 5 回実行されますが、毎回 1 つの列しか選択されないため、これは非常に非効率的です。理想的には、クエリを 1 回しか実行できませんが、データを 5 x 10 から 1 x 50 に転置します。

したがって、クエリが [ID]、[ColA]、[ColB]、[ColC]、[ColD]、[ColE] の 2 行を返す場合

これを次の形式にしたいと思います。

[ID0],[ColA0]

[ID0]、[ColB0]

[ID0],[ColC0]

[ID0],[Cold0]

[ID0],[ColE0]

[ID1],[ColA1]

[ID1]、[ColB1]

.

.

4

2 に答える 2

1

PIVOT と UNPIVOT を使用する

これらのリンクを確認してください

http://msdn.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

http://blogs.msdn.com/b/spike/archive/2009/03/03/pivot-tables-in-sql-server-a-simple-sample.aspx

于 2012-06-08T10:19:47.790 に答える
1

CTE を自分のデータに置き換えるだけで、準備完了です。

;WITH CTE AS
(   SELECT 1 [ID], 'A1' [ColA], 'B1' [ColB], 'C1' [ColC], 'D1' [ColD], 'E1' [ColE]
    UNION ALL
    SELECT 2 [ID], 'A2' [ColA], 'B2' [ColB], 'C2' [ColC], 'D2' [ColD], 'E2' [ColE]
)
SELECT  [ID], [ColumnName], Value
FROM    CTE
        UNPIVOT
        (   Value
            FOR [ColumnName] IN ([ColA], [ColB], [ColC], [ColD], [ColE])
        ) upvt
于 2012-06-08T10:35:07.460 に答える