Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL矩阵到数组_Sql_Arrays_Tsql_Matrix_Pivot - Fatal编程技术网

SQL矩阵到数组

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

我正在使用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     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的更多详细信息。

请告诉我,我认为这绝对是最好的方法。请告诉我,我认为这绝对是最好的方法