将列值转换为范围中的多个行

时间:2014-11-27 02:20:16

标签: mysql sql

我有一张价格范围的表 如何创建一个新表,其中每行具有唯一的价格值。 谢谢!

输入表:

min_price ,        max_price ,       item  
3 ,               5 ,              apple  
2 ,               6 ,              plum  
21 ,              25  ,            banana  

输出表

price  ,         item  
3   ,            apple  
4   ,            apple  
5 ,              apple  
2 ,              plum  
3 ,              plum  
4 ,              plum  
5 ,              plum  
6 ,              plum  
21 ,             banana  
22 ,             banana  
23 ,             banana  
24 ,             banana  
25 ,             banana  

2 个答案:

答案 0 :(得分:3)

您可以创建一个包含您关注的所有数字的表格:

CREATE TABLE numbers (
    n INTEGER NOT NULL,
    PRIMARY KEY n
);
INSERT INTO numbers (n) VALUES (1, 2, 3, 4, 5, ..., 1000);

然后你可以写一个连接:

SELECT n.n AS price, i.item
FROM numbers AS n
JOIN input AS i ON n BETWEEN min_price AND max_price
ORDER BY item, price

答案 1 :(得分:0)

首先解决方案;

select sequence.number as price, products.item
from sequence, products -- Note, no join!
where sequence.number >= products.min_price
       and sequence.number <= products.max_price

您需要生成一个序列表,其中包含一个数字列表,这些数字会以您使用的最高值达到最大值。一旦你有了这个,你可以加入这个表,没有一个子句来生成联合的所有可能组合,然后只需按你的范围进行过滤。

示例序列表

  +----------+
  |  number  |
  +----------+
  | 0        |
  | 1        |
  | 2        |
  | ..       |
  | 99999999 |
  +----------+