2016-10-06 7 views
1

Я сделал легкий пример, чтобы лучше понять, что такое мой вопрос. Итак, у меня есть 2 таблицы, и у меня есть выбор, основанный на inner join, который находится в выборе.SQL split column

create table students(
id_student number, 
name_student varchar2(15), 
id_advisor number, 
money number 
); 

insert into students values(1, 'Student_1', 1, 100); 
insert into students values(2, 'Student_2', 8,-200); 
insert into students values(4, 'Student_4', 7, 256); 
insert into students values(5, 'Student_5', 3, -305); 
---------------- 

create table advisors(
id_advisor number, 
name_advisor varchar2(15) 
); 

insert into advisors values(1, 'advisor_1'); 
insert into advisors values(3, 'advisor_3'); 
insert into advisors values(5, 'advisor_5'); 

------------------------------------------ 
SELECT name_advisor, money as money_pozitive 
FROM(
select name_student, name_advisor, money from students 
inner join advisors on students.id_advisor = advisors.id_advisor) 
WHERE money > 0 

С помощью этого кода я имею следующий результат:

name_advisor | money_pozitive 
------------------------------------ 
advisor_1  | 100 

Мой вопрос, как я добавить дополнительный столбец с именем money_negative с конечно отрицательных значений? как это:

name_advisor | money_pozitive | money_negative 
--------------------------------------------------------- 
advisor_1  | 100    | -305 

ответ

4

Просто используйте case:

select name_student, name_advisor, 
     (case when money > 0 then money end) as money_positive, 
     (case when money < 0 then money end) as money_negative 
from students s inner join 
    advisors a 
    on s.id_advisor = a.id_advisor; 

Примечания:

  • подзапрос не является необходимым.
  • Использование псевдонимов. Они упрощают чтение и чтение запроса.
  • Если у вас несколько имен таблиц, это хорошая привычка квалифицировать имена всех столбцов (например, использовать псевдонимы таблиц для имен столбцов).
  • И вам не нужен пункт where.
+0

спасибо. Скажите, пожалуйста, как удалить ненулевые значения? из этих 2 столбцов? – BOB

+1

@ Marius. , , Используйте 'else 0' в' case', если вы хотите нуль вместо 'NULL'. –