Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 3 селекта  [new]
Бывалый_Я
Guest
Товарищи Гуру,помогите). Есть три выборки,соединнённые union all.Если какая-либо из них не возвращает ничего, то соответственно и ничего не выводит на её месте. Как сделать,чтобы если селект ничего не выбрал,то выводился к примеру null ?
21 окт 10, 16:49    [9651247]     Ответить | Цитировать Сообщить модератору
 Re: 3 селекта  [new]
AmKad
Member

Откуда:
Сообщений: 5222
Бывалый_Я,

select * 
from       t1
right join dual d on 1 = 1
21 окт 10, 16:52    [9651279]     Ответить | Цитировать Сообщить модератору
 Re: 3 селекта  [new]
Бывалый_Я
Guest
Возможно ли как-то каждое новое(не повторяющееся) значение столбца выводить в новом столбце?
К примеру:
|column|
12345
12345
25678
25678
33333
вывести так:
|column1| |column2| |column3|
12345        25678     33333
21 окт 10, 17:55    [9651978]     Ответить | Цитировать Сообщить модератору
 Re: 3 селекта  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2855
Бывалый_Я,

distinct
транспонирование
21 окт 10, 18:04    [9652067]     Ответить | Цитировать Сообщить модератору
 Re: 3 селекта  [new]
AmKad
Member

Откуда:
Сообщений: 5222
Бывалый_Я,

На примере трех уникальных значений
with s as
(select trunc(level / 4) + 1 id from dual connect by level <= 10)
select 
max(decode(rn, 1, id)) f1,
max(decode(rn, 2, id)) f2,
max(decode(rn, 3, id)) f3
from
   (select id, row_number() over (order by id) rn
    from 
       (select distinct id 
        from s
        order by id
       )
   )     
Если версия позволяет, то pivot
21 окт 10, 18:12    [9652130]     Ответить | Цитировать Сообщить модератору
 Re: 3 селекта  [new]
AmKad
Member

Откуда:
Сообщений: 5222
AmKad,

with s as
(select trunc(level / 4) + 1 id from dual connect by level <= 10)
select 
max(decode(rn, 1, id)) f1,
max(decode(rn, 2, id)) f2,
max(decode(rn, 3, id)) f3
from
   (select id, row_number() over (order by id) rn
    from s
    group by id
    order by id
   ) 
21 окт 10, 18:26    [9652245]     Ответить | Цитировать Сообщить модератору
 Re: 3 селекта  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6729
AmKad,

xml pivot
22 окт 10, 00:12    [9653548]     Ответить | Цитировать Сообщить модератору
 Re: 3 селекта  [new]
Batsall
Member

Откуда: Москва
Сообщений: 360
AmKad
Бывалый_Я,

select * 
from       t1
right join dual d on 1 = 1
А как бы эту фишку переписать на оракловый диалект? Что-то у меня ничего изящнее
WITH t AS
  (SELECT LEVEL id, dummy d
   FROM dual
   WHERE 1 = 0 CONNECT BY LEVEL < = 5)
SELECT nvl(a.id, 0)
FROM t a,
  dual b
WHERE b.dummy = a.d(+)
не выходит...
22 окт 10, 11:15    [9655090]     Ответить | Цитировать Сообщить модератору
 Re: 3 селекта  [new]
AmKad
Member

Откуда:
Сообщений: 5222
Batsall,

with s as
(select level id, 'name' || level nm from dual connect by level <= 10
)
select *
from s, dual d
where d.dummy = nvl2(s.nm(+), d.dummy, d.dummy)
and   s.id(+) = -10
22 окт 10, 11:35    [9655324]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить