SQLでこのようなデータセットを作成するにはどうすればよいですか?このようなマトリックスとして構築テーブルからSQLを使用して行列からデータセットを作成するにはどうすればよいですか?
a 100
b 100
b 200
c 100
c 300
d 200
d 300
:
alfa 100 200 300
a 1 0 0
b 1 1 0
c 1 0 1
d 0 1 1
SQLでこのようなデータセットを作成するにはどうすればよいですか?このようなマトリックスとして構築テーブルからSQLを使用して行列からデータセットを作成するにはどうすればよいですか?
a 100
b 100
b 200
c 100
c 300
d 200
d 300
:
alfa 100 200 300
a 1 0 0
b 1 1 0
c 1 0 1
d 0 1 1
データをピボット解除する最良の方法は、UNPIVOT機能を使用しないことです。
可能であれば、UNIONを回避することは非常に非効率的です。
「CRUTS APPLY with VALUES」は優れた方法ですが、多くの例があります。
私は、これはあなたが何を意味するかで全くわからないんだけど、のは、ここから始めてみましょう:
CREATE TABLE matrix (
alfa CHAR(1),
[100] BIT,
[200] BIT,
[300] BIT
)
INSERT INTO matrix
SELECT 'a', 1, 0, 0
UNION
SELECT 'b', 1, 1, 0
UNION
SELECT 'c', 1, 0, 1
UNION
SELECT 'd', 0, 1, 1
SELECT * FROM matrix
DROP TABLE matrix
結果:
/------------------------\
| alfa | 100 | 200 | 300 |
|------+-----+-----+-----|
| a | 1 | 0 | 0 |
| b | 1 | 1 | 0 |
| c | 1 | 0 | 1 |
| d | 0 | 1 | 1 |
\------------------------/
これを試してください。
declare @Table table (alfa char(10), c100 Int, C200 int, c300 int)
insert into @Table values
('a', 1, 0, 0)
,('b', 1, 1, 0)
,('c', 1, 0, 1)
,('d', 0, 1, 1);
SELECT alfa, 100 as Val FROM @Table WHERE c100<>0
UNION ALL SELECT alfa, 200 as val FROM @Table WHERE C200<>0
UNION ALL SELECT alfa, 300 as val FROM @Table WHERE c300<>0
ようこそスタックオーバーフロー!良い質問をするのを助けるために私たちの[SO Question Checklist](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)をよく読んで、良い答えを得てください。 –