我有一张材料表。 我需要填写该表格中的数据输入表格。
问题是数据输入表格被分成多个列,每个列包含许多材料,如图所示。 如何编写一个tsql select查询来获取第一列材质名称到一列,第二束进入第二列等等。
答案 0 :(得分:2)
最简单的方法是在客户端,而不是在数据库中,但如果你真的想这样做,我会假设将行分配到3组的最简单方法是使用row_number()和modulo 3并使用它构建单独的列。这会使行的排序略有不同:
A B C
D E F
G H
如果你需要以其他顺序使用它们,那么你需要将row_number()除以行数除以3.你会按顺序得到它们
A D G
B E H
C F
示例:
select
max(case when GRP = 0 then VALUE end),
max(case when GRP = 1 then VALUE end),
max(case when GRP = 2 then VALUE end)
from
(
select
(row_number() over (order by VALUE)-1) % 3 as GRP,
(row_number() over (order by VALUE)-1) / 3 as ROW,
VALUE
from table1
)X
group by ROW
中的示例
编辑:示例如何以另一种方式划分行:
declare @NOLINES int
select @NOLINES = ceiling(count(*) / 3.0) from table1
select
max(case when GRP = 0 then VALUE end),
max(case when GRP = 1 then VALUE end),
max(case when GRP = 2 then VALUE end)
from
(
select
(row_number() over (order by VALUE)-1) / @NOLINES as GRP,
(row_number() over (order by VALUE)-1) % @NOLINES as ROW,
VALUE
from table1
)X
group by ROW