2016-11-25 66 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

歡迎來到Stack Overflow!請查看我們的[SO問題清單](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)來幫助你提出一個好問題,從而得到一個很好的答案。 –

回答

0

未轉印數據的最佳方法是不使用UNPIVOT功能。

如果可能,避免使用UNION可能效率極低。

'交叉應用與價值'是一個很好的方法,有很多例子在線。

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