SQL矩阵到数组
我正在使用T-SQL,我有一个看起来像矩阵8x8的表。 我的目标是使用Pivot将矩阵表生成数组。。。我已经阅读了论坛和更多的东西,我设法找到了,但我仍然不能使它的代码SQL矩阵到数组,sql,arrays,tsql,matrix,pivot,Sql,Arrays,Tsql,Matrix,Pivot,我正在使用T-SQL,我有一个看起来像矩阵8x8的表。 我的目标是使用Pivot将矩阵表生成数组。。。我已经阅读了论坛和更多的东西,我设法找到了,但我仍然不能使它的代码 ID Bucket B1 B2 B3 B4 5 1 20 21 45 12 6 2 12 18 19 48 7 3 19 78 40
ID Bucket B1 B2 B3 B4
5 1 20 21 45 12
6 2 12 18 19 48
7 3 19 78 40 78
8 4 72 34 12 17
所以我需要做的就是从那个表中创建三维数组,并保存行、列和值。。。像这样
Row Column Value
1 1 20
1 2 21
1 3 45
1 2 12
etc
etc
etc
4 3 12
4 4 17
有人知道我如何用T-SQL编写代码吗
我之所以这样做,是因为我想用矩阵本身相乘。所以,如果我把它放在透视表中,就更容易将它相乘。
谢谢为什么要使用PIVOT?您可以通过简单的SELECT查询获取数据,除非我在这里遗漏了什么
DECLARE @Matrix TABLE (
Id INT,
Bucket INT,
B1 INT,
B2 INT,
B3 INT,
B4 INT);
INSERT INTO @Matrix VALUES (5, 1, 20, 21, 45, 12);
INSERT INTO @Matrix VALUES (6, 2, 12, 18, 19, 48);
INSERT INTO @Matrix VALUES (7, 3, 19, 78, 40, 78);
INSERT INTO @Matrix VALUES (8, 4, 72, 34, 12, 17);
SELECT
Bucket AS [Row],
1 AS [Column],
B1 AS Value
FROM
@Matrix
UNION ALL
SELECT
Bucket AS [Row],
2 AS [Column],
B2 AS Value
FROM
@Matrix
UNION ALL
SELECT
Bucket AS [Row],
3 AS [Column],
B3 AS Value
FROM
@Matrix
UNION ALL
SELECT
Bucket AS [Row],
4 AS [Column],
B4 AS Value
FROM
@Matrix
ORDER BY
1, 2;
结果:
Row Column Value
1 1 20
1 2 21
1 3 45
1 4 12
2 1 12
2 2 18
2 3 19
2 4 48
3 1 19
3 2 78
3 3 40
3 4 78
4 1 72
4 2 34
4 3 12
4 4 17
为什么要使用PIVOT?您可以通过简单的SELECT查询获取数据,除非我在这里遗漏了什么
DECLARE @Matrix TABLE (
Id INT,
Bucket INT,
B1 INT,
B2 INT,
B3 INT,
B4 INT);
INSERT INTO @Matrix VALUES (5, 1, 20, 21, 45, 12);
INSERT INTO @Matrix VALUES (6, 2, 12, 18, 19, 48);
INSERT INTO @Matrix VALUES (7, 3, 19, 78, 40, 78);
INSERT INTO @Matrix VALUES (8, 4, 72, 34, 12, 17);
SELECT
Bucket AS [Row],
1 AS [Column],
B1 AS Value
FROM
@Matrix
UNION ALL
SELECT
Bucket AS [Row],
2 AS [Column],
B2 AS Value
FROM
@Matrix
UNION ALL
SELECT
Bucket AS [Row],
3 AS [Column],
B3 AS Value
FROM
@Matrix
UNION ALL
SELECT
Bucket AS [Row],
4 AS [Column],
B4 AS Value
FROM
@Matrix
ORDER BY
1, 2;
结果:
Row Column Value
1 1 20
1 2 21
1 3 45
1 4 12
2 1 12
2 2 18
2 3 19
2 4 48
3 1 19
3 2 78
3 3 40
3 4 78
4 1 72
4 2 34
4 3 12
4 4 17
尝试取消激活您的数据:
DECLARE @table TABLE (id INT, Bucket INT, B1 INT, B2 INT, B3 INT, B4 INT)
INSERT INTO @table VALUES
(5,1,20,21,45,12),
(6,2,12,18,19,48),
(7,3,19,78,40,78),
(8,4,72,34,12,17)
SELECT rn AS [ROW],
VALUE AS [ColumnNumber],
orders AS [VALUE]
FROM
(
SELECT ROW_NUMBER () OVER (ORDER BY id) AS rn,id, Bucket, B1 [1], B2 [2], B3 [3], B4 [4]
FROM @table
) AS t
UNPIVOT
(
orders
FOR VALUE IN([1], [2],[3],[4])
) AS pvt
有关PIVOT和UNPIVOT的更多详细信息,请查看此文档。尝试取消PIVOT数据:
DECLARE @table TABLE (id INT, Bucket INT, B1 INT, B2 INT, B3 INT, B4 INT)
INSERT INTO @table VALUES
(5,1,20,21,45,12),
(6,2,12,18,19,48),
(7,3,19,78,40,78),
(8,4,72,34,12,17)
SELECT rn AS [ROW],
VALUE AS [ColumnNumber],
orders AS [VALUE]
FROM
(
SELECT ROW_NUMBER () OVER (ORDER BY id) AS rn,id, Bucket, B1 [1], B2 [2], B3 [3], B4 [4]
FROM @table
) AS t
UNPIVOT
(
orders
FOR VALUE IN([1], [2],[3],[4])
) AS pvt
查看此文档以了解有关PIVOT和UNPIVOT的更多详细信息。请告诉我,我认为这绝对是最好的方法。请告诉我,我认为这绝对是最好的方法