2016-01-24 27 views
0

我有一个材料表。 我需要填写该表格中的数据输入表单。分配多列上的任意行

的问题是,数据输入形式被划分成多个列,每列一个含有多种材料如图片。 enter image description here 如何写一个TSQL SELECT查询获得的材料名称的第一束成一列,第二束入第二塔等。

回答

2

在客户端而不是在数据库中执行此操作可能是最简单的,但是如果您真的想这样做,我会假设将行分配到3组中的最简单方法是将row_number()与以3为模并使用它建立单独的列。这将略有不同的行排序:

A B C 
D E F 
G H 

如果你需要让他们在另外的顺序,那么你需要用行除以3的数量来划分ROW_NUMBER(),将你让他们在

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

01:
A D G 
B E H 
C F 

实施例的顺序编辑:示例如何以其他方式划分行:

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 
+0

非常感谢。你会举另一个例子来以问题中的其他方式显示行吗? – Ehab

+0

你只需要有行数+交换模数和除法另一种方式。为此添加了示例。 –

+0

工作正常。谢谢! – Ehab