powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос: Итого по убыванию + условие.
5 сообщений из 5, страница 1 из 1
Запрос: Итого по убыванию + условие.
    #39769227
LightN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Вот есть запрос, в котором dbo.Years_qu - таблица с bit - полями (данные за определенный Год: нужен/не нужен Год, или включить/выключить (1 запись-строка)), в другой таблице содержатся итоговые значения закупок каждого конкретного Customer_ID за определенный год (+- 9000 записей).
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
ALTER VIEW [dbo].[Customers_Sum_Y]
AS
  SELECT cs.[Customer_ID],cs.[OrganizationName],cs.[ManagerID],
      IIF( y.[2019] = 0 ,0, cs.S_2019) 
	+ IIF( y.[2018] = 0 ,0, cs.S_2018) 
	+ IIF( y.[2017] = 0 ,0, cs.S_2017)
	+ IIF( y.[2016] = 0 ,0, cs.S_2016) 
	+ IIF( y.[2015] = 0 ,0, cs.S_2015) 
	+ IIF( y.[2014] = 0 ,0, cs.S_2014) AS T_Year
, IIF( y.[2019] = 0 ,0, cs.S_2019) AS T_2019
, IIF( y.[2018] = 0 ,0, cs.S_2018) AS T_2018 
, IIF( y.[2017] = 0 ,0, cs.S_2017) AS T_2017
, IIF( y.[2016] = 0 ,0, cs.S_2016) AS T_2016
, IIF( y.[2015] = 0 ,0, cs.S_2015) AS T_2015
, IIF( y.[2014] = 0 ,0, cs.S_2014) AS T_2014
 FROM dbo.Years_qu AS y (nolock) 
 RIGHT OUTER JOIN dbo.[Customers_Sum] AS cs (nolock) ON y.[ManagerID] = cs.[ManagerID]
GO

Предположим мы хотим не учитывать данные за 14,15 года. Для этого на клиенте в определенной форме указываем:
Код: sql
1.
2.
   update  dbo.Years_qu set [2019] = 1, [2018] = 1, [2017] = 1, [2016] = 1, [2015] = 0, [2014] = 0
    where ManagerID=@MyManagerID

Далее нам нужны, например, такие данные: 0-е приходы за 19 и 18 год и Не-0-е за 16,17.
Т.е. клиенты, которых мы потерями за прошлый год. А ещё нужна сортировка по убыванию итоговых значений закупок каждого конкретного Customer_ID:
Код: sql
1.
2.
3.
4.
5.
6.
7.
Select * from [dbo].[Customers_Sum_Y]
where  
 T_2019=0 and
 T_2018=0 and 
 T_2017>0 and
 T_2016>0 
order by T_Year DESC

Последний запрос виснет на сервере на 100-180 секунд и более.
Причем условие where T_2019=0 and T_2018=0 выполняется пулей.
Как только добавляю T_2017>0 and T_2016>0 включаются тормоза.
Пробовал IIF заменить на Case, пробовал умножать Год на Итого и потом суммировать, пробовал <>0, всё равно тормоза ...
Понимаю, что данные не кэшируются и нужно что-то изменить, ну чтобы SQL не вис. Как быть?
...
Рейтинг: 0 / 0
Запрос: Итого по убыванию + условие.
    #39769237
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LightNПоследний запрос виснет на сервере на 100-180 секунд и более.
Причем условие where T_2019=0 and T_2018=0 выполняется пулей.
Как только добавляю T_2017>0 and T_2016>0 включаются тормоза.


Зависает = долго работает но в итоге выполняется
или
Зависает = долго работает и вы его отменяете
?

Если первое, смотрите планы запросов

Если второе, попробуйте посмотреть план запроса, если построение плана так же "зависает", то у вас строится/обновляется статистика по полям T_2017, T_2016
...
Рейтинг: 0 / 0
Запрос: Итого по убыванию + условие.
    #39769253
LightN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex,
В итоге запрос выполняется, но очень-очень медленно. В плане тоже всё ОК. Похоже наступил на какие-то грабли.
Возможно расчёт суммы T_Year как-то спотыкается на условии T_2017>0 and T_2016>0 и они мешают друг другу ...
...
Рейтинг: 0 / 0
Запрос: Итого по убыванию + условие.
    #39771073
Oleg_SQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а не LEFT JOIN нужен?
...
Рейтинг: 0 / 0
Запрос: Итого по убыванию + условие.
    #39771489
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LightNПробовал IIF заменить на Case, пробовал умножать Год на Итого и потом суммировать, пробовал <>0, всё равно тормоза ...
Понимаю, что данные не кэшируются и нужно что-то изменить, ну чтобы SQL не вис. Как быть?

Вы меня пугаете.
Используете фильтр по вычисляемому полю и ишо жалуетесь на жисть.
Самом собой - сканирование таблицы и быстро не будет никогда.

ЗЫ. Про "архитектуру" я лучше промолчу. Но "быстро" = полная перестройка вашего сарая.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запрос: Итого по убыванию + условие.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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