在多列上分配任意行

时间:2016-01-24 08:00:36

标签: sql-server tsql data-entry

我有一张材料表。 我需要填写该表格中的数据输入表格。

问题是数据输入表格被分成多个列,每个列包含许多材料,如图所示。 enter image description here 如何编写一个tsql select查询来获取第一列材质名称到一列,第二束进入第二列等等。

1 个答案:

答案 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

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