2015-09-15 2 views
0

У меня есть таблица содержит следующие данныеПолучить значение строки в столбце

id  student  class  
1  English  3-B  
2  null   null 
3  null   null 
4  Jack   OuMe 
5  Richard  DSA  
6  Jhon   Ross 
7  French  5-B  
8  null   null  
9  null   null  
10  Cena   ADI   
11  Mike   Rock   
12  Philip  DSK 

мне нужен запрос на выборку, чтобы получить результирующую, как показано ниже:

id  student  class classSTUD 
    1  English  3-B  3-B 
    2  null   null  3-B 
    3  null   null  3-B 
    4  Jack   OuMe  3-B 
    5  Richard  DSA  3-B 
    6  Jhon   Ross  3-B 
    7  French  5-B  5-B 
    8  null   null  5-B 
    9  null   null  5-B 
    10  Cena   ADI  5-B 
    11  Mike   Rock  5-B 
    12  Philip  DSK  5-B 

я попробовал запрос как ниже, но я не получил нужного результата

SELECT ID, STUDENT, CLASS, 
NVL (CLASS, LAG(CLASS IGNORE NULLS) OVER (ORDER BY ID)) CLASSSTUD 
FROM MYTABLE 
ORDER BY ID; 

Спасибо за вашу помощь

ответ

0

Я исправил проблему я улучшил ответ ответил на Гордон Линофф

SELECT ID, STUDENT, CLASS, 
    NVL(CASE WHEN CLASS LIKE '%-%' THEN CLASS END, LAG(CASE WHEN CLASS LIKE '%-%' THEN CLASS END) IGNORE NULLS OVER 
      (ORDER BY ID)) as CLASSSTUD 
FROM MYTABLE 
ORDER BY ID; 
0

В вашей базе данных, похоже, серьезный недостаток. Для обеспечения правильной работы вам нужны две таблицы. Вы смешиваете две разные категории данных в одном столбце, поэтому у вас возникла проблема. У вас есть классы и студенты в той же колонке.

Создайте отдельную таблицу для занятий и одну для учащихся.

Я понятия не имею, почему у вас есть таблица, содержащая только нулевые значения.

Классы таблицы:

id class classcode 
1  English 3-B 
2  French 5-B 

Студенты стол:

id student classid 
1  Jack  1 
2  Richard 1 
3  Jhon  1 
4  Cena  2 
5  Mike  2 
6  Philip 2 

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

Классы таблицы:

classcode class 
3-B   English 
5-B   French 

Студенты стол:

id student classcode 
1  Jack  3-B 
2  Richard 3-B 
3  Jhon  3-B 
4  Cena  5-B 
5  Mike  5-B 
6  Philip  5-B 

Я покинул поле идентификатора в таблице студентов, потому что существует вероятность того, что вы будете иметь два Домкраты/Richards/Jhons/whatevers в какой-то момент, поэтому иметь уникальный идентификатор имеет смысл ,

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

+0

это это xml-файл, и я загрузил его в таблицу с помощью 'ETL' (Oracle Data Integator), и мне нужно сделать преобразование, но мне нужно заявление запроса. –

+0

Это говорит о том, что, возможно, лучший вопрос, сделать ODI импортировать XML-файл в заданный (bett er) структура данных. К сожалению, я не знаком с продуктом и поэтому не могу ответить на этот вопрос. –

+0

Хорошо спасибо, сэр за вашу помощь –

0

Неясно, что ваша структура данных действительно представляет, но похоже, что вам нужно что-то вроде этого:

SELECT ID, STUDENT, CLASS, 
     LAG((CASE WHEN CLASS LIKE '%-%' THEN CLASS END) IGNORE NULLS) OVER 
      (ORDER BY ID) as CLASSSTUD 
FROM MYTABLE 
ORDER BY ID; 
+0

это неправильные данные –

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