Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Группировка значений  [new]
группировка
Guest
Pole1Pole2
150
130
240
220
20
30
340
360
40


Как сделать запрос чтобы он вывел минимальные значения, сгрупированные по полю Pole1, исключая 0 при группировке, кроме последней записи.

В итоге должен выдать следующее:

Pole1Pole2
130
220
340
40
30 авг 11, 15:26    [11201538]     Ответить | Цитировать Сообщить модератору
 Re: Группировка значений  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
группировка, пронумеровать по возрастанию Pole2, с разбиением по Pole1, в CASE для 0 - установить стотыщмульенов. Отобрать все записи с роунамбер=1. Справитесь?
30 авг 11, 15:32    [11201577]     Ответить | Цитировать Сообщить модератору
 Re: Группировка значений  [new]
Hamber
Member

Откуда: Москва
Сообщений: 311
kDnZP
группировка, пронумеровать по возрастанию Pole2, с разбиением по Pole1, в CASE для 0 - установить стотыщмульенов. Отобрать все записи с роунамбер=1. Справитесь?


В CASE для 0 для последней записи тоже установится стотыщмульенов. и в итоге отобразится это значение, а не 0 как нужно.
30 авг 11, 15:43    [11201656]     Ответить | Цитировать Сообщить модератору
 Re: Группировка значений  [new]
iljy
Member

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

зачем так сложно?
ISNULL(min(NULLIF(Pole2,0)),0)
30 авг 11, 15:50    [11201710]     Ответить | Цитировать Сообщить модератору
 Re: Группировка значений  [new]
Hamber
Member

Откуда: Москва
Сообщений: 311
о, Cупер. Большое спасибо! :)

То что надо!
30 авг 11, 15:52    [11201730]     Ответить | Цитировать Сообщить модератору
 Re: Группировка значений  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
iljy
kDnZP,

зачем так сложно?
ISNULL(min(NULLIF(Pole2,0)),0)


И чего в этом сложного? ))) Вы жеж такой запрос не думаючи напишите. Хотя да, можно и с группировкой.
SELECT TOP 1 WITH TIES
        *
FROM    @tbl
ORDER BY ROW_NUMBER() OVER ( PARTITION BY Pole1 ORDER BY CASE WHEN Pole2 = 0 THEN 2147483647
                                                              ELSE Pole2
                                                         END )
30 авг 11, 16:16    [11201948]     Ответить | Цитировать Сообщить модератору
 Re: Группировка значений  [new]
ростов сортировочная
Guest
kDnZP,

сделай добро - подари детям грабли?

ORDER BY CASE WHEN Pole2 = 0 THEN 2147483647
                                                              ELSE Pole2
                                                         END

задачка - типовая для group by all.
30 авг 11, 17:20    [11202433]     Ответить | Цитировать Сообщить модератору
 Re: Группировка значений  [new]
iljy
Member

Откуда:
Сообщений: 8711
ростов сортировочная
kDnZP,

сделай добро - подари детям грабли?

ORDER BY CASE WHEN Pole2 = 0 THEN 2147483647
                                                              ELSE Pole2
                                                         END

задачка - типовая для group by all.


БОЛ
Синтаксис, несовместимый с ISO
ALL
В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется.

Так что грабли предлагаете вы.
30 авг 11, 17:30    [11202492]     Ответить | Цитировать Сообщить модератору
 Re: Группировка значений  [new]
тотоже
Guest
iljy,

2147483647 - это, извиняюсь за выражение, такой п...ц что никакими познаниями о будущих версиях не отмажешь.
30 авг 11, 17:36    [11202536]     Ответить | Цитировать Сообщить модератору
 Re: Группировка значений  [new]
тотоже
Guest
iljy,

ваш вариант с наллыф одобряю, всё по-взрослому, чики-брики, никаких кэйсов.
30 авг 11, 17:38    [11202554]     Ответить | Цитировать Сообщить модератору
 Re: Группировка значений  [new]
iljy
Member

Откуда:
Сообщений: 8711
тотоже
iljy,

2147483647 - это, извиняюсь за выражение, такой п...ц что никакими познаниями о будущих версиях не отмажешь.

Это принцип. Устранить эти грабли тривиально:
order by ROW_NUMBER() over(partition by Pole1 order by case Pole2 when 0 then 1 else 0 end, Pole2)
30 авг 11, 17:42    [11202579]     Ответить | Цитировать Сообщить модератору
 Re: Группировка значений  [new]
тотоже
Guest
окэ, окэ, победили... bored
30 авг 11, 17:45    [11202598]     Ответить | Цитировать Сообщить модератору
 Re: Группировка значений  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
ORDER BY ROW_NUMBER() OVER(PARTITION BY Pole1 ORDER BY -NULLIF(Pole2,0) DESC)
?
Вот только если в группе нет ничего, кроме 0, он вылезет, и не только в последней группе.
Или может, я что-то не понял...
30 авг 11, 17:48    [11202606]     Ответить | Цитировать Сообщить модератору
 Re: Группировка значений  [new]
группировка
Guest
Если условие задачи такие,то :

Pole1Pole2
15
10
25
20
30
34


В итоге выведет следующее:

Pole1Pole2
15
25
34


а должен:

Pole1Pole2
15
25
30


Условие задачи такие, что во всех записях кроме последней пары, игнорировать 0.

SELECT Pole1,ISNULL(min(NULLIF(Pole2,0)),0) from #t
13 янв 12, 17:59    [11901613]     Ответить | Цитировать Сообщить модератору
 Re: Группировка значений  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8878
группировка
Если условие задачи такие,то :

Pole1Pole2
15
10
25
20
30
34


В итоге выведет следующее:

Pole1Pole2
15
25
34


а должен:

Pole1Pole2
15
25
30


Условие задачи такие, что во всех записях кроме последней пары, игнорировать 0.

SELECT Pole1,ISNULL(min(NULLIF(Pole2,0)),0) from #t


А) Отпи"дить за постановку задачи
Б) чем последняя группа отличается от предпоследней? А если там пятнадцать групп, причём не подряд? .. и при этом во второй группе есть только нулевые значения?!
13 янв 12, 21:36    [11902664]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить