Хотите отображать значения 1 столбца несколько раз

Я использую ORACLE 11g. У меня есть такая таблица

col1     col2
john      1
david     2
root      3
baily     4

Я хочу, чтобы вывод, как в таблице ниже, печатал 1 строку несколько раз

col1     col2
john      1
david     2
david     2
root      3
root      3
root      3
baily     4
baily     4
baily     4
baily     4

«SQL 11g» не существует. Скорее всего, вы используете Oracle 11g.

Paul Maxwell 30.03.2021 07:29

Являются ли значения в col1 в вашей таблице ввода разными (уникальными)? Если да, было бы полезно упомянуть об этом. Если это не так, то не на 100% ясно, каков желаемый результат. Например, предположим, что входные данные состоят ровно из двух строк, каждая из которых содержит значения john, 3. Каков желаемый результат в этом случае?

mathguy 30.03.2021 07:53
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
43
3

Ответы 3

Я предположил, что вы используете Oracle 11g (т.е. приведенный ниже синтаксис SQL предназначен для Oracle)

Присоединение ваших данных к «таблице чисел» повторит каждую строку в соответствии со значением в col2. Например:

CREATE TABLE mytable(
   col1 VARCHAR(5) NOT NULL PRIMARY KEY
  ,col2 INTEGER  NOT NULL
);
INSERT INTO mytable(col1,col2) VALUES ('john',1);
INSERT INTO mytable(col1,col2) VALUES ('david',2);
INSERT INTO mytable(col1,col2) VALUES ('root',3);
INSERT INTO mytable(col1,col2) VALUES ('baily',4);


select col1, col2
from mytable t
inner join (
   select 1 as n from dual union all
   select 2 as n from dual union all
   select 3 as n from dual union all
   select 4 as n from dual
   ) n on t.col2 >= n.n
   order by col2, col1


+-------+------+
| COL1  | COL2 |
+-------+------+
| john  |    1 |
| david |    2 |
| david |    2 |
| root  |    3 |
| root  |    3 |
| root  |    3 |
| baily |    4 |
| baily |    4 |
| baily |    4 |
| baily |    4 |
+-------+------+

Примечание: Сформировать необходимую «таблицу чисел» можно несколькими способами.

например используйте любую существующую таблицу с достаточным количеством строк в ней для ваших целей

select row_number() over(order by table_name) as n
from all_tables

демонстрация

n.n, вероятно, будет работать, но это не кажется хорошей идеей. Лучше всего использовать другое имя / псевдоним для представления и для столбца.
mathguy 30.03.2021 07:54

С образцами данных, которые вы разместили

SQL> select * From test order by col2;

COL1        COL2
----- ----------
john           1
david          2
root           3
baily          4

запрос, который возвращает желаемый результат, может быть

SQL> select col1, col2
  2  from test cross join table(cast(multiset(select level from dual
  3                                           connect by level <= col2
  4                                          ) as sys.odcinumberlist))
  5  order by col2;

COL1        COL2
----- ----------
john           1
david          2
david          2
root           3
root           3
root           3
baily          4
baily          4
baily          4
baily          4

10 rows selected.

SQL>

Вы можете использовать иерархический запрос, предполагая, что значения имени (col1) уникальны по всей таблице, например

 SELECT * 
   FROM t
CONNECT BY level <= col2   
    AND PRIOR SYS_GUID() IS NOT NULL
    AND PRIOR col1 = col1
  ORDER BY col2 

Demo

Другие вопросы по теме