2016-11-25 16 views
0

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 
+0

ようこそスタックオーバーフロー!良い質問をするのを助けるために私たちの[SO Question Checklist](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)をよく読んで、良い答えを得てください。 –

答えて

0

データをピボット解除する最良の方法は、UNPIVOT機能を使用しないことです。

可能であれば、UNIONを回避することは非常に非効率的です。

「CRUTS APPLY with VALUES」は優れた方法ですが、多くの例があります。

0

私は、これはあなたが何を意味するかで全くわからないんだけど、のは、ここから始めてみましょう:

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 | 
\------------------------/ 
0

これを試してください。

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 
関連する問題