Как разбить колонны? - PullRequest
1 голос
/ 02 марта 2012
Name            Nameid
P,q,r,s,t       One
A,b,c           Two
D,e             Three

Это моя исходная таблица, но я хочу, чтобы моя целевая таблица была такой

Name    Nameid
P       One
Q       One
R       One
S       One
T       One
A       Two
B       Two
C       Two
D       three

Ответы [ 3 ]

1 голос
/ 02 марта 2012

В таком случае, я думаю, было бы более элегантно хранить данные другим способом.

Если вы вставляете свои строки из программы, попробуйте разделить вашу строку там и вместо этого вставить еще несколько строк.

Позвольте мне привести пример псевдокода.

number = "One"
many_letters = "P,Q,R,S,T".split(",")
for(letter in many_letters) {
     insert_values(letter, number)
}
1 голос
/ 02 марта 2012

Вот один способ, поднял с здесь :

SQL> CREATE TABLE t (name VARCHAR2(20), nameid VARCHAR2(10));

Table created.

SQL> INSERT INTO t VALUES ('P,q,r,s,t','One');

1 row created.

SQL> INSERT INTO t VALUES ('A,b,c'    ,'Two');

1 row created.

SQL> INSERT INTO t VALUES ('D,e'      ,'Three');

1 row created.

SQL> SELECT     nameid
  2  ,          REGEXP_SUBSTR (name, '[^,]+', 1, LEVEL) AS token
  3  FROM       t
  4  CONNECT BY PRIOR nameid = nameid
  5  AND        REGEXP_INSTR (name, '[^,]+', 1, LEVEL) > 0
  6  AND        PRIOR DBMS_RANDOM.STRING ('p', 10) IS NOT NULL
  7  ;

NAMEID     TOKEN
---------- --------------------
One        P
One        q
One        r
One        s
One        t
Three      D
Three      e
Two        A
Two        b
Two        c

10 rows selected.

SQL>
0 голосов
/ 02 марта 2012

Извините, я не понял вопрос, который был опубликован. Это было переформатировано с тех пор.

Oracle не имеет встроенной функции Split, которая вам здесь нужна. Следующая ссылка показывает, как создать пользовательскую функцию Split:

http://srinisreeramoju.blogspot.com/2010/03/oracle-custom-split-function.html

Как только вы создали типы и функцию, вы просто вызовете ее как:

SELECT
    Split(Name, ',') AS Name,
    NameID
FROM
    YourTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...