powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Хитрая группировка
3 сообщений из 3, страница 1 из 1
Хитрая группировка
    #38998559
IvanBlohin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица Plank, в ней для каждого кода несколько записей со значением некоторых параметров.
Нужно сгруппировать значения в таблице следующим образом: для записей в которых flag не null - вычисть максимально значение параметра, потом к полученному значению прибавить значения параметра из записей в которых flag = null.
Сделал в два запроса:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
--исходная таблица
declare @Plank table (
  kod int,
  param1 int,
  param2 int,
  flag int
)
insert @Plank values (4, 100, 50, 1)
insert @Plank values (12, 100, 100, 1)
insert @Plank values (4, 120, 200, null)
insert @Plank values (4, 125, 160, 1)
insert @Plank values (12, 200, 99, 1)
insert @Plank values (3, 50, 40, null)

select * from @Plank

-- итоговая таблица
declare @Result table (
  kod int,
  param1 int,
  param2 int
)

-- если flag не null  - нужно вычислить максимальное значение параметра
insert @Result 
select kod, max(param1), max(param2) from @Plank 
where flag is not null 
group by kod 

-- если flag null  - нужно просуммировать значение параметра
merge @Result R
using (select kod, sum(param1) p1, sum(param2) p2 from @Plank where flag is null group by kod) P
on (P.kod = R.kod)
when matched then
   update set 
     param1 = param1 + p1,  
     param2 = param2 + p2  
when not matched by target then
   insert values (P.kod, P.p1, P.p2);

select * from @Result



Может можно решить вопрос более изящным запросом?
MS SQL 2008.
...
Рейтинг: 0 / 0
Хитрая группировка
    #38998580
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
select coalesce(max(case when not flag is null then param1 end),0)+coalesce(sum(case when flag is null then param1 end),0) as result,
kod
from @Plank
group by kod
...
Рейтинг: 0 / 0
Хитрая группировка
    #38998971
IvanBlohin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Naf
Спасибо! Не знал что так можно.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Хитрая группировка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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