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正好回答了最初的问题。