【发布时间】:2016-01-24 08:00:36
【问题描述】:
我有一张材料表。 我需要从该表中填写数据输入表。
问题是数据输入表被分成了多列,每一列都包含一些材料,如图所示。 如何编写一个 tsql 选择查询,将第一束材料名称放入一列,第二束放入第二列,依此类推。
【问题讨论】:
标签: sql-server tsql data-entry
我有一张材料表。 我需要从该表中填写数据输入表。
问题是数据输入表被分成了多列,每一列都包含一些材料,如图所示。 如何编写一个 tsql 选择查询,将第一束材料名称放入一列,第二束放入第二列,依此类推。
【问题讨论】:
标签: sql-server tsql data-entry
在客户端而不是在数据库中这样做可能是最简单的,但如果你真的想这样做,我认为将行分配到 3 组的最简单方法是使用带模的 row_number() 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
SQL Fiddle 中的示例
编辑:示例如何以其他方式划分行:
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
【讨论】: