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

Откуда:
Сообщений: 20
Всем доброго дня.
Прошу помощи в решении следующей проблемы.
Есть 2 запроса, которые отличаются одним условием (limit=0 и limit<>0)ю То есть в итоге должны появляться столбцы под одно и другое условие. Попробовал через UNION. Мне выдается ошибка ORA-01785 ORDER BY item must be the number of a SELECT-list expression.
Вот запрос. Что не так делаю.

select count( distinct(r.card)), sum(r.amount), trunc (o.date, 'dd')
from table1 r, table2 o, table3 c
where o.id=r.id_operation
and r.card=c.card_number
and o.errorcode=0
and o.date>'01.09.2011'
UNION ALL
select count( distinct(r.card)), sum(r.amount), trunc (o.date, 'dd')
from table1 r, table2 o, table3 c
where o.id=r.id_operation
and r.card=c.card_number
and o.errorcode=0
and c.limit =0
and o.date>'01.09.2011'
order by trunc (o.date, 'dd')
14 дек 11, 17:10    [11766056]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
iap
Member

Откуда: Москва
Сообщений: 47019
Kosstok,

а Oracle тут при чём?
14 дек 11, 17:12    [11766082]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
Kosstok
Member

Откуда:
Сообщений: 20
Ой, не туда написал.

Модератор: Тема перенесена из форума "Microsoft SQL Server".


Сообщение было отредактировано: 14 дек 11, 17:41
14 дек 11, 17:16    [11766133]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Kosstok,

trunc (o.date, 'dd') это третья колонка в списке SELECT. В ORDER BY укажи номер 3:

ORDER BY 3
14 дек 11, 17:45    [11766383]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6910
o.date>'01.09.2011'

и это поправьте
14 дек 11, 17:49    [11766419]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
Kosstok
Member

Откуда:
Сообщений: 20
В этом случае появляется ошибка: ORA-00937: not a single-group group function перевод.
Суть в том, что мне нужно, чтобы результат второго запроса выводился рядом с результатом первого (по отдельности все работает).
То есть сейчас, например:
Запрос1 дата сумма1 кол-во1
Запрос2 дата сумма2 кол-во2

Надо:
Запрос дата сумма1 кол-во1 сумма2 кол-во2

Данные сумма и количество зависят от условия where, который в двух запросах разный.
14 дек 11, 17:53    [11766462]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6910
Kosstok
Надо:
Запрос дата сумма1 кол-во1 сумма2 кол-во2

JOIN?
14 дек 11, 17:59    [11766525]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Тут UNION ALL не нужен. Просто нужно разложить данные по колонкам в зависимости от limit и агрегировать.

select trunc (o.date, 'dd'),
count(distinct decode(limit, 0, r.card)), -- 1
count(distinct decode(limit, 0, null, r.card)) -- 2
from
...



В исходном запросе нет условия limit<>0. Есть все записи и записи limit = 0.
14 дек 11, 18:00    [11766532]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6910
Kosstok
В этом случае появляется ошибка: ORA-00937: not a single-group group function перевод.

оберните запрос перед сортировкой
14 дек 11, 18:01    [11766539]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
usr120
Guest
Kosstok
(по отдельности все работает).

Да ну правда что ли?

select count( distinct(r.card)), sum(r.amount), trunc (o.date, 'dd') 
from table1 r, table2 o, table3 c
where o.id=r.id_operation
and r.card=c.card_number
and o.errorcode=0
and o.date>'01.09.2011'

как это оно у вас выпонляется без group by ?
14 дек 11, 18:05    [11766566]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
Kosstok
Member

Откуда:
Сообщений: 20
alex-ls, а чуть конкретней про JOIN можно? Я пытался, тоже выдает ошибки.

mcureenab , запрос запустился, но выдал только одну часть, где limit=0. Или что-то не так делаю?

usr120, в отдельных запросах group by был. Я при объединении убрал его из первого запроса
14 дек 11, 18:14    [11766673]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Kosstok,

наверное предикат limit=0 не убрал из where.
покажи запрос.
14 дек 11, 18:15    [11766690]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
Kosstok
Member

Откуда:
Сообщений: 20
usr120, а в примере, просто строчку над order by потерял пока все лишнее убирал.
14 дек 11, 18:18    [11766732]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
Kosstok
Member

Откуда:
Сообщений: 20
mcureenab , вот

select count( distinct decode(limit, 0, r.card)), count( distinct decode(limit, 0, null, r.card)), sum(r.amount), trunc (o.date, 'dd')
from table1 r, table2 o, table3 c
where o.id=r.id_operation
and r.card=c.card_number
and o.errorcode=0
and o.date>'01.09.2011'
group by trunc (o.op_date, 'dd')
order by trunc (o.op_date, 'dd')
14 дек 11, 18:21    [11766747]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
usr120
Guest
Kosstok
в отдельных запросах group by был. Я при объединении убрал его из первого запроса

Ошибку то читать пробовали? Не приходило в голову, что group by всё-таки нужен, причем в обоих запросах ?
14 дек 11, 18:24    [11766767]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Kosstok,

count я так понимаю вычисляется...

так а что sum(r.amount), через decode не развалил на две колонки как в count?

и литерал '01.09.2011' нужно явно через to_date с форматом в дату преобразовать.
14 дек 11, 18:25    [11766777]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
usr120,

ну что ты прицепился. ошибка у него в ORDER BY появлялась, до GROUP BY дело не доходило просто.
а к чему протокол испытаний не приложен, так тому верить нельзя.
14 дек 11, 18:28    [11766792]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
usr120
Guest
mcureenab,

читай пост 11766462
14 дек 11, 18:31    [11766809]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
Kosstok
Member

Откуда:
Сообщений: 20
mcureenab , да, не развалил. Выдает только частично второй запрос в моем начальном примере.
Кажется, делов-то?! Стобцы с условием limit=0 и рядом такие же с условием limit <>0
14 дек 11, 18:33    [11766822]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
usr120
Guest
Kosstok,

1. пользуйтесь SRC для кода
2. если у вас count работает, sum не работает, то и запрос нужно показывать с sum'ами которые не работают!
14 дек 11, 19:05    [11767033]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6910
Kosstok
alex-ls, а чуть конкретней про JOIN можно? Я пытался, тоже выдает ошибки.

если у Вас обращение к одним и тем же таблицам в 2х частях, разделененных UNION ALL - то смотрите вариант mcureenab. Если разные, то соедините LEFT JOIN их между собой
15 дек 11, 04:23    [11768411]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
Kosstok
Member

Откуда:
Сообщений: 20
С Left Join тоже как-то не так работает. Вот можно просто прикинуть. Есть 2 простых запроса:

select сумма, дата from товары
where сумма > 100
group by дата

и

select сумма, дата from товары
where сумма < 100
group by дата

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

дата сумма>100 сумма<100

Всем спасибо за помощь, но пока как-то никак.
15 дек 11, 09:50    [11768885]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6910
select 
  SUM(case sm > 100 then sm else 0 end) sm1
  SUM(case sm <=100 then sm else 0 end) sm2
from t1
15 дек 11, 09:54    [11768907]     Ответить | Цитировать Сообщить модератору
 Re: Помогите в решении проблемы  [new]
Kosstok
Member

Откуда:
Сообщений: 20
alex-ls , буду пытаться!
15 дек 11, 16:05    [11772425]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить