Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 залдачка SQL  [new]
veli
Member

Откуда:
Сообщений: 152
Уважаемые, помогите решить вот такую задачку, необходимо из примера выбросить 2-ю строку, причем сделать на 1-ом уровне без подзапросов.

select 1 as id , 0 as sum from dual
union all
select 2 as id , 0 as sum from dual
union all
select 2 as id , 150 as sum from dual
union all
select 2 as id , 200 as sum from dual

1                                      	0
2                                      	0
2                                      	150
2                                      	200
а надо вот так:
1                                      	0
2                                      	150
2                                      	200
8 окт 07, 10:51    [4766690]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
Elic
Member

Откуда:
Сообщений: 29990
veli
выбросить 2-ю строку, причем сделать на 1-ом уровне без подзапросов.
id=2 and sum=0

Join устроит?
8 окт 07, 10:55    [4766728]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
veli
Member

Откуда:
Сообщений: 152
id-шников не 2, а туева хуча, join устроит, это был абстрактный пример, призванный наглядно продемонстрировать цель.
8 окт 07, 11:06    [4766822]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2498
veli
id-шников не 2, а туева хуча, join устроит, это был абстрактный пример, призванный наглядно продемонстрировать цель.
Цель не достигнута. Никакой наглядности в твоем примере не прослеживается...
8 окт 07, 11:08    [4766835]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2498
Как минимум две различных трактовки желаемого можно сделать глядя на твой пример
8 окт 07, 11:09    [4766844]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
Mikst
Member

Откуда: Москва
Сообщений: 983
ради смеха, но с долей шутки:

select distinct decode(rownum,2,lag(id) over(order by 1),id), 
             decode(rownum,2,lag(sum) over(order by 1),sum)   from
(select 1 as id , 0 as sum from dual
union all
select 2 as id , 0 as sum from dual
union all
select 2 as id , 150 as sum from dual
union all
select 2 as id , 200 as sum from dual) t 
8 окт 07, 11:22    [4766941]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116299
Бабичев Сергей
Как минимум две различных трактовки желаемого можно сделать глядя на твой пример


+1
Автор, правильно ли я понимаю, что Вы при равных значениях поля sum
хотите оставлять строку с меньшим id ?
8 окт 07, 11:22    [4766944]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
Elic
Member

Откуда:
Сообщений: 29990
select min(id), sum from t group by sum

veli
это был абстрактный пример, призванный наглядно продемонстрировать цель.
RTFM
8 окт 07, 11:27    [4766985]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116299
Mikst
ради смеха, но с долей шутки:

select distinct decode(rownum,2,lag(id) over(order by 1),id), 
             decode(rownum,2,lag(sum) over(order by 1),sum)   from
(select 1 as id , 0 as sum from dual
union all
select 2 as id , 0 as sum from dual
union all
select 2 as id , 150 as sum from dual
union all
select 2 as id , 200 as sum from dual) t 


(C) "От шуточек этих зябко"
8 окт 07, 11:30    [4767006]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
Mikst
Member

Откуда: Москва
Сообщений: 983
dmidek

(C) "От шуточек этих зябко"



Да ладно так переживать.

как просил автор "необходимо из примера выбросить 2-ю строку, причем сделать на 1-ом уровне без подзапросов"
8 окт 07, 11:33    [4767031]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116299
Mikst
dmidek

(C) "От шуточек этих зябко"



Да ладно так переживать.

как просил автор "необходимо из примера выбросить 2-ю строку, причем сделать на 1-ом уровне без подзапросов"


Да я и не переживаю.
Просто любуюсь :-)

SQL> select distinct decode(rownum,2,lag(id) over(order by 1),id),
  2               decode(rownum,2,lag(sum) over(order by 1),sum)   from
  3  (select 1 as id , 0 as sum from dual
  4  union all
  5  select 2 as id , 0 as sum from dual
  6  union all
  7  select 2 as id , 150 as sum from dual
  8  union all
  9  select 2 as id , 200 as sum from dual) t
 10  /
 
DECODE(ROWNUM,2,LAG(ID)OVER(OR DECODE(ROWNUM,2,LAG(SUM)OVER(O
------------------------------ ------------------------------
                             1                              0
                             2                              0
                             2                            150
                             2                            200
 
SQL> 
8 окт 07, 11:35    [4767048]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
Mikst
Member

Откуда: Москва
Сообщений: 983
странно

SQL> select distinct decode(rownum,2,lag(id) over(order by 1),id) a, decode(rownum,2,lag(su
rder by 1),sum) b   from
  2  (select 1 as id , 0 as sum from dual
  3  union all
  4  select 2 as id , 0 as sum from dual
  5  union all
  6  select 2 as id , 150 as sum from dual
  7  union all
  8  select 2 as id , 200 as sum from dual) t ;

         A          B
---------- ----------
         1          0
         2        150
         2        200
8 окт 07, 11:37    [4767065]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
nikopol
Member

Откуда:
Сообщений: 335
SQL> SELECT DISTINCT DECODE (ROWNUM, 2, LAG (ID) OVER (ORDER BY 1), ID),
  2                  DECODE (ROWNUM, 2, LAG (SUM) OVER (ORDER BY 1), SUM)
  3             FROM (SELECT 1 AS ID, 0 AS SUM
  4                     FROM DUAL
  5                   UNION ALL
  6                   SELECT 2 AS ID, 0 AS SUM
  7                     FROM DUAL
  8                   UNION ALL
  9                   SELECT 2 AS ID, 150 AS SUM
 10                     FROM DUAL
 11                   UNION ALL
 12                   SELECT 2 AS ID, 200 AS SUM
 13                     FROM DUAL) t
 14  /

DECODE(ROWNUM,2,LAG(ID)OVER(ORDERBY1),ID) DECODE(ROWNUM,2,LAG(SUM)OVER(ORDERBY1),SUM)
----------------------------------------- -------------------------------------------
                                        1                                           0
                                        2                                         150
                                        2                                         200
Я брошу все и войду в твое положение
8 окт 07, 11:38    [4767072]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116299
2mikst & nikopol :
Чудеса, правда ?
Вот к чему приводят невинные шуточки
8 окт 07, 11:40    [4767087]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
Elic
Member

Откуда:
Сообщений: 29990
Mikst
странно
over(order by 1)
random удивляет?
8 окт 07, 11:43    [4767101]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
nikopol
Member

Откуда:
Сообщений: 335
dmidek
2mikst & nikopol :
Чудеса, правда ?
Вот к чему приводят невинные шуточки

:)) здОрово :)
8 окт 07, 11:44    [4767110]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
Mikst
Member

Откуда: Москва
Сообщений: 983
Elic
Mikst
странно
over(order by 1)
random удивляет?


рэндом рэндомом, но не все ли равно какую "вторую" строку убирать?
8 окт 07, 11:49    [4767142]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116299
Mikst
Elic
Mikst
странно
over(order by 1)
random удивляет?


рэндом рэндомом, но не все ли равно какую "вторую" строку убирать?


ROWNUM и ORDER BY 1 совершенно "рассогласованны" :-)
То, что является "второй" строкой для ROWNUM, для ORDER BY 1 не является таковой :-)
8 окт 07, 11:56    [4767185]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
Elic
Member

Откуда:
Сообщений: 29990
Mikst
рэндом рэндомом, но не все ли равно какую "вторую" строку убирать?
Если бы ты убирал и вторую, ещё можно было бы говорить о "всё равно".
8 окт 07, 11:59    [4767213]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
Mikst
Member

Откуда: Москва
Сообщений: 983
dmidek

ROWNUM и ORDER BY 1 совершенно "рассогласованны" :-)
То, что является "второй" строкой для ROWNUM, для ORDER BY 1 не является таковой :-)


:) понял. ладно, понедельник, утро, пробки :) бывает
8 окт 07, 12:25    [4767435]     Ответить | Цитировать Сообщить модератору
 Re: залдачка SQL  [new]
Mikst
Member

Откуда: Москва
Сообщений: 983
select distinct decode(row_number() over (order by id,sum),2,lag(id) over(order by id,sum),id) a,
 decode(row_number() over (order by id,sum),2,lag(sum) over(order by id,sum),sum) b   from
(select 1 as id , 0 as sum from dual
union all
select 2 as id , 0 as sum from dual
union all
select 2 as id , 150 as sum from dual
union all
select 2 as id , 200 as sum from dual) t 

суть то не меняется. (наезды что distinct уберет нужное не принимаются). и 2 не такая уж и вторая :)
8 окт 07, 12:36    [4767538]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить