如何使用SQL从矩阵创建数据集?

时间:2016-11-25 20:31:42

标签: sql-server tsql

如何使用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

3 个答案:

答案 0 :(得分: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  |
\------------------------/

答案 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

答案 2 :(得分:0)

取消数据存储的最佳方法是不使用UNPIVOT功能。

尽可能避免使用UNION,效率极低。

'CROSS APPLY WITH VALUES'是一种很好的方法,网上有很多例子。