考虑以下mysql表:
ID WeightS AmountS WeightM AmountM WeightL AmountL Someothercolumnshere
1 6 3 10 2 18 2 ...
我需要将这些数据重组为一个支持数据库的表,其中amount列中的每一部分应该是一个结果行。例如。从前两列,WeightS和AmountS,SELECT应该产生3个结果行,每个行的权重为2 kgs(总共= 6 kgs)。所以完整的结果表应该是这样的:
Weight Someothercolumnshere
2 ...
2 ...
2 ...
5 ...
5 ...
9 ...
9 ...
我甚至不知道是否有能够执行此类操作的SQL语法?我以前从来没有这样的要求。最糟糕的情况是,我必须在PHP中这样做,但我认为MYSQL更有趣:p
我已经在sqlfiddle上构建了架构,但我担心这一切都是我所拥有的。
答案 0 :(得分:1)
你需要一个Tally表来执行这样的任务。根据需要创建尽可能多的行。
Create table Tally(`N` int);
insert into Tally( `N`) values(1),(2),(3),(4),(5);
然后
(select `ID`, `WeightS`/`AmountS`, `Someothercolumnshere`
from Catches
join Tally on Catches.`AmountS` >= Tally.`N`
)
UNION ALL
(select `ID`, `WeightL`/`AmountL`, `Someothercolumnshere`
from Catches
join Tally on Catches.`AmountL` >= Tally.`N`
)
UNION ALL
(select `ID`, `WeightM`/`AmountM`, `Someothercolumnshere`
from Catches
join Tally on Catches.`AmountM` >= Tally.`N`
)