2015-11-19 66 views
0

我有一个选择上选择一个号码表选择号码为多行

SELECT * FROM table 

我产生的东西,看起来像

| column | 
| 2 | 
| 5 | 

我想知道是否有转方式2加5成2的倍数行5.所以基本上

| column | 
| 2 | 
| 2 | 
| 5 | 
| 5 | 
| 5 | 
| 5 | 
| 5 | 

编辑:要求由几个就是我的终极目标是,我真的想完成的是一种选票选择,基本上我将一个人获得的选票数量存储为#,并且我想将该#变成多行,以便我可以将其转移到另一个程序中以供赢家选择。

回答

1

您可以使用数字(aka理货)表:

SELECT col 
FROM mytable AS t1 
INNER JOIN (
    SELECT @rn := @rn + 1 AS num 
    FROM (
    SELECT 0 AS n UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 
      UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 
      UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0) AS x 
    CROSS JOIN (
    SELECT 0 AS n UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 
      UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 
      UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0) AS y 
    CROSS JOIN (SELECT @rn := 0) AS var   
) AS t2 ON t1.col >= t2.num 
ORDER BY col 

以上查询使用一个数值表,其值范围为[1-100]。如果您的列包含较大的值,则必须使用其他CROSS JOIN操作来增加数字表。

Demo here

+1

我会用'0,1,2,3,4,5,6,7,8,9'而不是多个0来表示清楚的读数。但是做同样的:) –

0

您可以通过反复加入自身来成倍增长。

但是,你真的想要完成什么?

select 
    a.* 
from 
    table a 
    left join table b on 1=1 
    left join table c on 1=1 
+0

什么我真正想要实现是一种投票的选择,基本上我存放选票的人获得的#的号码,我希望把那个#为多行,所以我可以将其传送转到另一个获胜者选择的计划。 – Steven

0

作为一种变通方法,您可以用两列像添加表:

|Id|Numbers| 
|1 | 1 | 
|2 | 2 | 
|3 | 2 | 
|4 | 3 | 
|5 | 3 | 
|6 | 3 | 
|7 | 4 | 
|. | ... | 
|n | n | 

然后你可以使用一个

LEFT JOIN ON numbers = column 

否则,你需要使用存储过程的循环取决于'列'值

+0

你有存储过程的例子吗? – Steven

+0

@Steven对不起,我没有。 – genespos