sql读取n行数并显示固定数量的列

时间:2014-01-06 10:47:25

标签: sql pivot

我们目前正在使用SQL2005。我有一个SQL表,它将序列号存储在一个列中。因此,10000个序列号意味着10000行。当这些打印在发票上时,由于信息的存储方式,每行打印一个序列号。我们目前在我们的ERP系统中使用内置发票,但如果我可以对连续出版物进行打印,则会更改为SSRS。

如何读取序列号并显示序列号(在视图或sp中),每行 10次 。因此,如果我正在阅读18个连续剧,它将是两行(第一行有10个连续出版物,第二行有8个连续出版物)。如果我正在阅读53个连续剧,那么它将是6行。做到这一点将减少发票打印所需的纸张,大约是目前所需的纸张的十分之一!

只是要清楚......系列文件当前存储并打印如下:

Ser1  
Ser2  
Ser3  
Ser4  
Ser5  

我希望他们像这样打印:

Ser1 Ser2 Ser3 Ser4 Ser5 Ser6 Ser7 Ser8 Ser9 Ser10  
Ser11 Ser12 Ser13 Ser14 Ser15 Ser16....etc

由于

1 个答案:

答案 0 :(得分:1)

您可以使用row_number()为每行指定唯一编号。这允许您group by rn / 10,为您提供10行的组。

以下是3行而不是10行的示例:

select  max(case when rn % 3 = 0 then serialno end) as sn1
,       max(case when rn % 3 = 1 then serialno end) as sn2
,       max(case when rn % 3 = 2 then serialno end) as sn3
from    (
        select  row_number() over (order by serialno) -1 as rn
        ,       serialno
        from    @t
        ) as SubQueryAlias
group by
        rn / 3

See it working at SQL Fiddle.