2012-03-02 4 views
1
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 
+2

вертел колонны? иногда мне жаль, что я не могу плюнуть в столбцы. – Taryn

+0

Возможный дубликат [Разделить столбец на несколько строк] (http://stackoverflow.com/questions/3713107/split-column-to-multiple-rows) – APC

ответ

-3

К сожалению, я не понял, вопрос был размещен. С тех пор он был переформатирован.

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

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

После того как вы создали тип и функцию вы бы просто назвать это как:

SELECT 
    Split(Name, ',') AS Name, 
    NameID 
FROM 
    YourTable 
1

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

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

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

number = "One" 
many_letters = "P,Q,R,S,T".split(",") 
for(letter in many_letters) { 
    insert_values(letter, number) 
} 
+0

Я не уверен, что это то, что он просил. Однако вопрос неясен. – vulkanino

+0

Вы правы. Я думаю, что это потенциальное решение. – professorsloth

1

Вот один из способов, поднял из here:

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> 
Смежные вопросы