powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли обойтись без user aggregation function?
5 сообщений из 5, страница 1 из 1
Можно ли обойтись без user aggregation function?
    #39911166
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть набор статусов для устройств : 0-4

Конечный код для устройства после агрегации должен определятся следующим правилом: ( 3 < 4) < 2 < 0 < 1

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
-- Device status priority
-- ( 3 < 4) < 2 < 0 < 1

declare @tbl table (id int not null identity primary key, code int, dev int not null );

insert into @tbl values ( 3, 1 )
insert into @tbl values ( 3, 2 ), (4, 2)
insert into @tbl values ( 3, 3 ), (4, 3), (2, 3)
insert into @tbl values ( 4, 4 ), (2, 4), (0, 4)
insert into @tbl values ( 3, 5 ), (1, 5), (0, 5), (2, 5)

select * from @tbl

declare @result table (code int, dev int not null );

insert into @result values ( 3, 1 )
insert into @result values ( 4, 2 )
insert into @result values ( 2, 3 )
insert into @result values ( 0, 4 )
insert into @result values ( 1, 5 )

select * from @result
...
Рейтинг: 0 / 0
Можно ли обойтись без user aggregation function?
    #39911168
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно конечно 4 делитами решить но вдруг есть решение для селекта?
...
Рейтинг: 0 / 0
Можно ли обойтись без user aggregation function?
    #39911172
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik,

CASE-ом преобразовать статусы в правильную последовательность и потом по ROW_NUMBER взять последний для каждого
...
Рейтинг: 0 / 0
Можно ли обойтись без user aggregation function?
    #39911173
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with t as
(
 select
  a.*, b.priority, row_number() over (partition by a.dev order by b.priority) as rn
 from
  @tbl a join
  (values (3, 4), (4, 3), (2, 2), (0, 1), (1, 0)) b(code, priority) on b.code = a.code
)
select
 code, dev
from
 t
where
 rn = 1
order by
 dev;
...
Рейтинг: 0 / 0
Можно ли обойтись без user aggregation function?
    #39911181
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

спасибо за красивое решение
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Можно ли обойтись без user aggregation function?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]