我需要在表格中显示每个字段的多个结果。我只需要一个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
行。
有什么想法吗?
答案 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);