使用相同的字段结果显示多行

时间:2010-06-28 16:38:22

标签: sql crystal-reports

我需要在表格中显示每个字段的多个结果。我只需要一个SQL语句,我不想​​使用Cursor。

这看起来很愚蠢,但每个项目的行数可能会有所不同。我需要将此信息作为Crystal Report详细信息打印出来。

假设我有这张表:

idItem     Cantidad     <more fields>
--------  -----------
    1000         3
    2000         2
    3000         5
    4000         1

我需要这个结果,只使用一个SQL Sentence:

1000
1000
1000
2000
2000
3000
3000
3000
3000
3000
4000

其中每个idItem都有Cantidad行。

有什么想法吗?

4 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

似乎应该在UI(或报告)中处理。我不太了解Crystal Reports,在那里提出建议。如果你确实需要在SQL中实现它,那么你可以使用Numbers表(或类似的东西):

SELECT
    idItem
FROM
    Some_Table ST
INNER JOIN Numbers N ON
    N.number > 0 AND
    N.number <= ST.cantidad

您可以使用子查询或函数或任何其他方法替换Numbers表,以便生成至少足以覆盖最大cantidad的数字结果集。

答案 2 :(得分:0)

如果您使用对此有很多用途的“数字”表以及许多类似用途,您可以使用以下SQL:

select t.idItem
  from myTable t
       join numbers n on n.num between 1 and t.Cantidad
order by t.idTtem

数字表应该包含从0或1到最大数字的所有整数,以便Cantidad永远不会超过它。

答案 3 :(得分:0)

正如其他人所说,你需要一个Numbers或Tally表,它只是一个整数的顺序列表。但是,如果您知道Cantidad永远不会超过五个,那么您可以执行以下操作:

Select idItem
From Table
    Join    (
            Select 1 As Value
            Union All Select 2
            Union All Select 3
            Union All Select 4
            Union All Select 5
            ) As Numbers
        On Numbers.Value <= Table.Cantidad

如果您使用的是SQL Server 2005,则可以使用CTE执行:

With Numbers As
    (
    Select 1 As Value
    Union All
    Select N.Value + 1
    From Numbers As N
    )
Select idItem
From Table
    Join Numbers As N
        On N.Value <= Table.Cantidad
Option (MaxRecursion 0);