2015-11-19 4 views
0

У меня есть выбор на столе, который выбирает номерВыберите номер на несколько строк

SELECT * FROM table 

И создает то, что выглядит как

| column | 
| 2 | 
| 5 | 

мне интересно, если есть способ, чтобы включить что 2 и 5 в нескольких строках 2 и 5. Таким образом, в основном

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

Edit: Как спросил несколько, что моя главная цель есть, я действительно пытаюсь выполнить, это своего рода выбор избирательного бюллетеня, в основном я храню количество избирательных бюллетеней, которые человек получает как #, и я хочу превратить это # ​​в несколько строк, чтобы я мог передать его другой программе для выбор победителя.

ответ

1

Вы можете сделать это, используя таблицу цифр (aka tally):

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

Смежные вопросы