Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Помогите с простым (видимо) запросом  [new]
100Kb
Guest
Имеется таблица следующего вида:


Number Type
123 Тип А
123 Тип В
123 Тип В
456 Тип В
456 Тип C
456 Тип C

Нужно запросом вывести

123 Тип А
123 Тип В
456 Тип В
456 Тип C

Отсекая только "полные" дубликаты т.е. сочетания Номер + Тип.

Почитав форум :) понял как получить дубликаты номеров
select number, count(rowid)  from mytable
group by number
having count (number) >1 

А вот как в запрос добавить мысль что нужны именно Номер+Тип я не понимаю :)
Ногами не бейте.
27 сен 07, 14:07    [4724158]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым (видимо) запросом  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
select DISTINCT number, type  
from mytable
27 сен 07, 14:12    [4724212]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым (видимо) запросом  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
1) select distinct "number", "type" from ...
2) select "number", "type", min(f3), max(f4)... from ... group by "number", "type"
3) select * from (select t.*, row_number() over(partition by "number", "type" order by 1) rn from ...) where rn=1
27 сен 07, 14:14    [4724237]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым (видимо) запросом  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
andrey_anonymous
1) 2) select "number", "type", min(f3), max(f4)... from ... group by "number", "type"
min(f3), max(f4)... тут ни к чему... Разве нет?
27 сен 07, 14:16    [4724253]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым (видимо) запросом  [new]
100Kb
Guest
О боги, ну и я стормозил. Стыдно даже :) Собственно DISTINCT - ответ на все мои вопросы. СПАСИБО :)
27 сен 07, 14:17    [4724262]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым (видимо) запросом  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
SQL*Plus
andrey_anonymous
1) 2) select "number", "type", min(f3), max(f4)... from ... group by "number", "type"
min(f3), max(f4)... тут ни к чему... Разве нет?

На всякий случай - все-таки автор наверняка "упростил" задачу при публикации :)
27 сен 07, 14:18    [4724267]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым (видимо) запросом  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8131
100Kb
О боги, ну и я стормозил. Стыдно даже :) Собственно DISTINCT - ответ на все мои вопросы. СПАСИБО :)
Со всяким может случиться и случается... :-)
27 сен 07, 14:18    [4724275]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым (видимо) запросом  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116077
Можно еще unique упомянуть.
Если одно слово забудется, может другое вспомнится
27 сен 07, 14:21    [4724304]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым (видимо) запросом  [new]
100Kb
Guest
Почтенные гуру, а можно я еще немного потуплю? :) Оказалось что в этой таблице, из которой мне нужно извлечь отчёт, столбцов намного больше чем я думал. То есть как-то так:

Number Type Day
123 Тип А Среда
123 Тип В Среда
123 Тип В Вторник
456 Тип В Вторник
456 Тип C Вторник
456 Тип C Вторник
Плюс еще много всего.
Причём в отчете мне нужно вывести (почти) все столбцы.
Соответственно, запрос
select distinct (Number), Type from mytable group by Number, Type
Дававший нужный результат.
в случае
select distinct (Number), Type,Day,... from mytable group by Number, Type,Day,...
выводит опять же ВСЕ данные из этой гнусной таблицы!
Люди добрые, сами мы не местные, помогите кто чем может.
Ну чтобы выводилось именно уникальное сочетание Number+Type.
Спасибо.
27 сен 07, 22:08    [4727311]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым (видимо) запросом  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116077
100Kb
Почтенные гуру, а можно я еще немного потуплю? :) Оказалось что в этой таблице, из которой мне нужно извлечь отчёт, столбцов намного больше чем я думал. То есть как-то так:

Number Type Day
123 Тип А Среда
123 Тип В Среда
123 Тип В Вторник
456 Тип В Вторник
456 Тип C Вторник
456 Тип C Вторник
Плюс еще много всего.
Причём в отчете мне нужно вывести (почти) все столбцы.
Соответственно, запрос
select distinct (Number), Type from mytable group by Number, Type
Дававший нужный результат.
в случае
select distinct (Number), Type,Day,... from mytable group by Number, Type,Day,...
выводит опять же ВСЕ данные из этой гнусной таблицы!
Люди добрые, сами мы не местные, помогите кто чем может.
Ну чтобы выводилось именно уникальное сочетание Number+Type.
Спасибо.


Это то не проблема....
Вопрос в том, что показывать еще.
Представим себе, что у Вас 20 строк с одинаковыми значениями
NUMBER и TYPE (кстати названия так себе :-)

И у Вас есть 20 различных значений поля Day .
Какой из них показывать при агрегации ?
Варианты ответа
-максимальный
-минимальный
-любой
-не думал об этом
- условие задачи надо уточнить :-)
27 сен 07, 22:17    [4727324]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым (видимо) запросом  [new]
100Kb
Guest
автор
Представим себе, что у Вас 20 строк с одинаковыми значениями

Исключено, один уникальный столбец в таблице точно есть, если Вы это имели в виду.
То есть на самом деле таблица конечно такая:
ID  Number      Type  Еще что-то
1 123 Тип А bbb
2 123 Тип В bbb
3 123 Тип В ....
4 456 Тип В
5 456 Тип C
6 456 Тип C
автор
NUMBER и TYPE (кстати названия так себе :-)

Да, конечно, myNumber и myType пусть будут :)
автор
И у Вас есть 20 различных значений поля Day .
Какой из них показывать при агрегации ?

Это как раз неважно, нужно в отчёте вывести именно одну и ЛЮБУЮ запись для каждой комбинации "Номер+Тип".
27 сен 07, 22:37    [4727376]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым (видимо) запросом  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10040
100Kb

Это как раз неважно, нужно в отчёте вывести именно одну и ЛЮБУЮ запись для каждой комбинации "Номер+Тип".


Then wrap columns Day,... in some aggregate finction, e.g. MAX, MIN.

SY.

Сообщение было отредактировано: 27 сен 07, 22:41
27 сен 07, 22:40    [4727383]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым (видимо) запросом  [new]
100Kb
Guest
автор
Then wrap columns Day,... in some aggregate finction, e.g. MAX, MIN

То есть вот так?
select distinct (myNumber), myType,min(myDay) from mytable group by myNumber, myType, myDay
?
27 сен 07, 22:57    [4727412]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с простым (видимо) запросом  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
100Kb
автор
Then wrap columns Day,... in some aggregate finction, e.g. MAX, MIN

То есть вот так?
select distinct (myNumber), myType,min(myDay) from mytable group by myNumber, myType, myDay
?

100Kb
Исключено, один уникальный столбец в таблице точно есть, если Вы это имели в виду.
То есть на самом деле таблица конечно такая:
ID Number Type Еще что-то
1 123 Тип А bbb
2 123 Тип В bbb
3 123 Тип В ....
4 456 Тип В
5 456 Тип C
6 456 Тип C

with t as (
  select 1 id, 123 num, 'Тип А' tp, 'q' d from dual
  union all
  select 2 id, 123 num, 'Тип В' tp, 'q' d from dual
  union all
  select 3 id, 123 num, 'Тип В' tp, 't' d from dual
  union all
  select 4 id, 456 num, 'Тип В' tp, 'e' d from dual
  union all
  select 5 id, 456 num, 'Тип C' tp, 'z' d from dual
  union all
  select 6 id, 456 num, 'Тип C' tp, 'f' d from dual) 
select min(id), num, tp, min(d) from t
group by num, tp
order by 1
27 сен 07, 23:19    [4727444]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить