0

我有一个有 2 列的表:

select product, quantity from datainformation

该表返回:

product quantity
1        10
2        30
4        23
191      10
900       1
1234      5
12345     2
  1. 两列是int。
  2. 表可以有 N 条记录

我需要为每 50 条记录获取 2 个字符串。我的问题是如何获得这些字符串:

stringproducts='1    2    4    191  900  1234 12345'
stringquantity='10   30   23   10   1    5    2    '

现在我需要每 50 条记录使用这些字符串,例如,如果我有 51 条记录,我需要我的第二个“块”来拥有最后一个产品和最后一个数量。

在我可以使用的另一种语言中ltrim(cad,5)。我将如何在 SQL 中执行此操作?

我可以为此使用东西吗?还是我需要一个循环并将它们 1 对 1 连接起来?我相信有了东西可能会更容易(可能是循环内的东西,但每条记录的循环会更容易)

4

2 回答 2

1

您可以使用FOR XML PATHSTUFF()

select 
  stuff((
        select ' ' + cast(product as char(10))
        from datainformation
        for XML path('')),1,1,'') as products,
 stuff((
        select ' ' + cast(quantity as char(10))
        from datainformation
        for XML path('')),1,1,'') as quantity

请参阅带有演示的 SQL Fiddle

于 2012-10-03T21:37:01.523 回答
0

如果您将其转换为 CHAR(5),它将有尾随空格来组成一个 5 字符块,用于您格式化的、连接的字符串。

declare @t table (product int, quantity int);
insert @t select
1        ,10 union all select
2        ,30 union all select
4        ,23 union all select
191      ,10 union all select
900      , 1 union all select
1234     , 5 union all select
12345    , 2;

declare @products varchar(max);
declare @quantity varchar(max);

select @products = coalesce(@products,'')
                 + cast(product as char(5)),
       @quantity = coalesce(@quantity,'')
                 + cast(quantity as char(5))
from @t
order by product

select @products, @quantity
于 2012-10-03T21:21:57.653 回答