2015-11-19 68 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