2015-02-05 79 views
0

表具有聚合值,但如果值大于1,我需要返回多行。MySQL如果聚合值大于1,则返回多行

下面是表现在的样子:

date description amount 

1/1/2015 alpha 3 

1/1/2015 beta 1 

这里是我需要它返回:

date description amount 

1/1/2015 alpha 1 

1/1/2015 alpha 1 

1/1/2015 alpha 1 

1/1/2015 beta 1 

任何帮助将不胜感激。

+0

您应该可以通过在存储过程中构建查询来完成此操作。 – shmosel 2015-02-05 21:23:11

+0

您能否详细说明如何构建该查询? – jrod2020 2015-02-05 21:32:20

+0

今天晚些时候我会看看我是否有时间。但基本思想是通过迭代遍历行和循环使用'amount'来构造一个包含必要数量的'UNION'的字符串,然后使用'PREPARE'和'EXECUTE'运行最终查询。 顺便说一下,是否有任何理由让最终结果集中的“金额”列? – shmosel 2015-02-05 21:39:47

回答

1

你需要一个数字表。像这样的作品多达3,可以很容易地扩展:

select t.date, t.description, 1 as amount 
from table t join 
    (select 1 as n union all select 2 union all select 3) n 
    on n.n <= t.amount; 

编辑:

如果您在表中的较大数额足够的行,你可以这样做:

select t.date, t.description, 1 as amount 
from table t join 
    (select @rn := @rn + 1 as n 
     from table cross join (select @rn := 0) vars 
    ) n 
    on n.n <= t.amount; 
+0

谢谢。当运行这个查询时,即使金额已经是1,它也是乘以记录。此外,金额的范围可以很大,达到数千。是否有一种替代方案不仅限于代码中的增量联合? – jrod2020 2015-02-05 21:08:51

+0

通过切换“<=" to "> =”,我可以在数量已达1时校正乘法记录。但是,我仍然不确定如何避免出现数量值可能明显高于3的情况(除了继续为每个增量值输入联合数据)。 – jrod2020 2015-02-05 21:39:58

+0

对于最后一次编辑,我在'@rn:= 0'附近得到一个语法错误:vars )n ...... – jrod2020 2015-02-05 21:50:39

0

这工作完美。

选择t.date,t.description,1从表量 吨加入 (选择@Rn:= @Rn + 1正从 表交叉联接(选择@Rn:= 0)瓦尔 ) n on nn < = t.amount;

相关问题