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

Откуда: Питер
Сообщений: 131
Всем доброго рабочего дня.
Может, поможете?
В таблице есть поле ИНН. Один и то же ИНН может встречаться несколько раз в разных строках. Надо отсортировать таблицу по ИНН так, чтобы строки с наибольшим числом одинаковых ИНН оказались в начале списка, а те, где ИНН встречается только раз на всю таблицу, соответственно в конце.
Что-то с ходу задача не поддалась, а циклов писать не хочется. :) Буду думать дальше.
16 сен 09, 10:01    [7665389]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Сортировка.  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
select INN, count(*) from MyDable group by INN order by count(*) desc
16 сен 09, 10:08    [7665430]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Сортировка.  [new]
Silence1
Member

Откуда: Питер
Сообщений: 131
Knyazev Alexey
select INN, count(*) from MyDable group by INN order by count(*) desc


Спасибо! Этот вариант тоже пригодится. Но имелось в виду, что количество строк в таблице остаётся прежним. Т.е. если было 100 записей, то те же 100 записей и выдаются, только в другом порядке.
16 сен 09, 10:21    [7665517]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Сортировка.  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
SQL2005/2008
SELECT *
FROM [Table]
ORDER BY COUNT(*)OVER(PARTITION BY [ИНН]) DESC, [ИНН];
16 сен 09, 10:25    [7665544]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Сортировка.  [new]
Добрый Э - Эх
Guest
...
order by count(1) OVER(partition by [ИНН]) desc, [ИНН]
16 сен 09, 10:25    [7665546]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Сортировка.  [new]
Silence1
Member

Откуда: Питер
Сообщений: 131
Мда... У меня задача крутится на MSSQL2000. :)

Но всё равно, спасибо!
16 сен 09, 10:37    [7665634]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Сортировка.  [new]
Добрый Э - Эх
Guest
Silence1
Мда... У меня задача крутится на MSSQL2000. :)

Но всё равно, спасибо!
Коррелированные подзапросы в селект-листе уже отменили?
16 сен 09, 11:01    [7665848]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Сортировка.  [new]
Добрый Э - Эх
Guest
НУ или хотя бы джойн с агрегированным подзапросом
16 сен 09, 11:02    [7665852]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Сортировка.  [new]
Добрый Э - Эх
Guest
Добрый Э - Эх
Silence1
Мда... У меня задача крутится на MSSQL2000. :)

Но всё равно, спасибо!
Коррелированные подзапросы в селект-листе уже отменили?


Вариант реализации:

declare @t table(inn int)
insert into @t
select 12345 union all
select 12345 union all
select 56789 union all
select 56789 union all
select 56789 union all
select 56789 union all
select 56789 union all
select 67890 union all
select 67890

select inn,
       (select count(1) from @t t1 where t1.inn = t0.inn) as cnt
  from @t t0
order by cnt desc, inn;
16 сен 09, 11:08    [7665893]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Сортировка.  [new]
Добрый Э - Эх
Guest
Добрый Э - Эх
НУ или хотя бы джойн с агрегированным подзапросом


Вариант реализации:
declare @t table(inn int)
insert into @t
select 12345 union all
select 12345 union all
select 56789 union all
select 56789 union all
select 56789 union all
select 56789 union all
select 56789 union all
select 67890 union all
select 67890

select t0.inn, t1.cnt
  from @t t0
  join (
         select inn, count(1) as cnt
           from @t
          group by inn
       ) t1
   on t0.inn = t1.inn
order by t1.cnt desc, t0.inn;
16 сен 09, 11:10    [7665911]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом. Сортировка.  [new]
Silence1
Member

Откуда: Питер
Сообщений: 131
Добрый Э - Эх

Спасибо! Всё сразу стало просто и понятно. :)
16 сен 09, 11:19    [7665979]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить