私はSQL Server 2014で作業しています。再配置しようとしているテーブルがあります。テーブル 'table1'を呼んでみましょう。この表には主キー列はありませんが、自然キーを構成する列はいくつかあります。これらの自然なキーの列を「NK1」、「NK2」、「NK3」としましょう。表には、フラグ値を保持するいくつかの列もあります。フラグ値は常に '0'または '1'です。簡単にするため、これらの列を 'test1'、 'test2'、および 'test3'とします。私は、テーブルを再配置したいアンピボットのようにSQLテーブルを再配置
CREATE TABLE table1
(
NK1 varchar(255)
,NK2 varchar(255)
,NK3 varchar(255)
,test1 int
,test2 int
,test3 int
)
;
INSERT INTO table1 (NK1, NK2, NK3, test1, test2, test3)
VALUES
('a', 'x', '10', 1, 1, 0)
,('a', 'x', '20', 1, 0, 1)
,('b', 'x', '10', 0, 0, 1)
;
次のように:のようなので、テーブルに見える「テストは」「テスト」各列の名前を保持します
CREATE table table1_rearranged
(
NK1 varchar(255)
,NK2 varchar(255)
,NK3 varchar(255)
,test varchar(255)
,flag int
)
;
、 'flag'は適切な 'test'カラムの対応する値を保持します。これを行うための効率的な方法は、(SQLクエリを経由して)あり
INSERT INTO table1_rearranged (NK1, NK2, NK3, test, flag)
VALUES
('a', 'x', '10', 'test1', 1)
,('a', 'x', '10', 'test2', 1)
,('a', 'x', '10', 'test3', 0)
,('a', 'x', '20', 'test1', 1)
,('a', 'x', '20', 'test2', 0)
,('a', 'x', '20', 'test3', 1)
,('b', 'x', '10', 'test1', 0)
,('b', 'x', '10', 'test2', 0)
,('b', 'x', '10', 'test3', 1)
:だから、上記の例のデータを使用して、私は再編成された表が見えるようにしたいですか?私の実際のテーブル1には多くの「テスト」カラム(テーブルが広い)があり、実際のテーブル1には多くの行(テーブルが深い)があるため「効率的」と言います。 (私はクエリと実行時間の読みやすさが気になります。)UNPIVOTを試してみることをお勧めしましたが、UNPIVOTがこれを実現するかどうかはわかりません。アンピボットを行います
ただ、追加のテストとフラグを適用する1つの –
@JohnCappelletti感謝を使用:) – GurV