表具有聚合值,但如果值大於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
任何幫助將不勝感激。
表具有聚合值,但如果值大於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
任何幫助將不勝感激。
你需要一個數字表。像這樣的作品多達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;
謝謝。當運行這個查詢時,即使金額已經是1,它也是乘以記錄。此外,金額的範圍可以很大,達到數千。是否有一種替代方案不僅限於代碼中的增量聯合? – jrod2020 2015-02-05 21:08:51
通過切換「<=" to "> =」,我可以在數量已達1時校正乘法記錄。但是,我仍然不確定如何避免出現數量值可能明顯高於3的情況(除了繼續爲每個增量值輸入聯合數據)。 – jrod2020 2015-02-05 21:39:58
對於最後一次編輯,我在'@rn:= 0'附近得到一個語法錯誤:vars )n ...... – jrod2020 2015-02-05 21:50:39
這工作完美。
選擇t.date,t.description,1從表量 噸加入 (選擇@Rn:= @Rn + 1正從 表交叉聯接(選擇@Rn:= 0)瓦爾 ) n on nn < = t.amount;
您應該可以通過在存儲過程中構建查詢來完成此操作。 – shmosel 2015-02-05 21:23:11
您能否詳細說明如何構建該查詢? – jrod2020 2015-02-05 21:32:20
今天晚些時候我會看看我是否有時間。但基本思想是通過迭代遍歷行和循環使用'amount'來構造一個包含必要數量的'UNION'的字符串,然後使用'PREPARE'和'EXECUTE'運行最終查詢。 順便說一下,是否有任何理由讓最終結果集中的「金額」列? – shmosel 2015-02-05 21:39:47