Sql server 从表中获取每个单元格的X和Y坐标,并在sql server中转换为新表

Sql server 从表中获取每个单元格的X和Y坐标,并在sql server中转换为新表,sql-server,matrix,coordinates,unpivot,Sql Server,Matrix,Coordinates,Unpivot,我正在尝试为一个矩阵表构建一个查询,该表的模式如下: ID 1 2 3 ----------- ----------- ----------- ----------- 1 13 32 55 2 30 75 129 我想根据单元格的坐标行号和列号获取单元格的位置,以创建一个包含row_num、col_num和value字段的新

我正在尝试为一个矩阵表构建一个查询,该表的模式如下:

ID           1           2           3
----------- ----------- ----------- -----------
1           13          32          55
2           30          75          129
我想根据单元格的坐标行号和列号获取单元格的位置,以创建一个包含row_num、col_num和value字段的新表

在给出的示例中,此查询应返回:

row_num col_num value
------- ------- -----------
1       1       13
2       1       30
1       2       32
2       2       75
1       3       55
2       3       129
查询必须获取每个单元格的值并返回其位置X和Y。 我尝试过不同的方法,但没有成功。我尝试使用UNPIVOT,但它没有向我显示正确的信息

非常感谢您的任何建议

更新: 我添加了一个列,其中包含行编号

您需要取消打印数据并生成行编号。这里有一种使用交叉应用的方法

要使用unpivot执行此操作,请尝试以下方法

select Id,col_num,value
from Yourtable
unpivot
(
  value
  for col_num in ([1], [2], [3])
) u;
您需要取消打印数据并生成行号。这里有一种使用交叉应用的方法

要使用unpivot执行此操作,请尝试以下方法

select Id,col_num,value
from Yourtable
unpivot
(
  value
  for col_num in ([1], [2], [3])
) u;

假设您确实有一列指定了排序,则可以按以下方式进行计算:

select dense_rank() over (order by ??) as row_num,
       v.col_num, v.val
from matrix m cross apply
     (values (m.col1, 1), (m.col2, 2), (m.col3, 3)
     ) v(val, col_num);

SQL表表示无序集。这个用于指定顺序的任何列。如果已经是row_num,则不需要稠密列。

假设有一列指定排序,则可以按以下方式进行计算:

select dense_rank() over (order by ??) as row_num,
       v.col_num, v.val
from matrix m cross apply
     (values (m.col1, 1), (m.col2, 2), (m.col3, 3)
     ) v(val, col_num);
SQL表表示无序集。这个用于指定顺序的任何列。如果已经是row_num,那么您不需要密集排列。

更新的问题

返回

row_num col_num value
1       1       13
2       1       30
1       2       32
2       2       75
1       3       55
2       3       129
编辑-按要求取消打印

有关最新问题

返回

row_num col_num value
1       1       13
2       1       30
1       2       32
2       2       75
1       3       55
2       3       129
编辑-按要求取消打印


您应该知道,关系数据库中的表本质上是未排序的,这意味着行数没有意义,除非您有一些列要排序。您应该知道,关系数据库中的表本质上是未排序的,这意味着行数没有意义,除非你有一些列需要订购。我添加了一个行号为IDI的列,非常感谢你的帮助!我添加了一个行号为IDI的列,非常感谢您的帮助!我怎样才能正确地使用UNPIVOT而不是CROSS-APLLY?我真的很感谢你的帮助!我怎样才能正确地使用UNPIVOT而不是CROSS-APLLY?我真的很感谢你的帮助!非常感谢。但是,我怎样才能正确地使用UNPIVOT而不是CROSS-APLLY呢?我真的很感谢你的帮助@JotaPardo很乐意帮忙,但公平地说,Prdp和Gordon正好回答了最初的问题。谢谢!但是,我怎样才能正确地使用UNPIVOT而不是CROSS-APLLY呢?我真的很感谢你的帮助@JotaPardo很乐意提供帮助,但公平地说,Prdp和Gordon正好回答了最初的问题。