如何使用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 :(得分: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'是一种很好的方法,网上有很多例子。