Код на T-SQL - нужно переписать не используя Group By clause
-
- Уже с Приветом
- Posts: 4309
- Joined: 15 Jul 2015 03:22
Код на T-SQL - нужно переписать не используя Group By clause
Есть такой код. (см ниже)
Может кто знает как написать его без Group By?
Group By этот делает расчеты не совсем правильными.
(Тестирование подтвердило это), поэтому велели избавиться от Group By; a я не знаю как -так чтобы не выдавало ошибку
DECLARE @MonthBOP date = '07-01-2017'
DECLARE @MonthEOP date = '02-28-2018'
DECLARE @GLRegionsWHID int = -1
SELECT
e.[GLRegion]
,e.[GLRegionWHID]
,e.[GLProgram]
,e.[GLProgramWHID]
,e.[DOLStatus]
,e.[DOLStatusWHID]
,e.[TerminationType]
,e.[TerminationReason]
,SUM(IIF((e.[DateHired] <= @MonthBOP) AND
(e.[DateTerminated] >= @MonthBOP), 1, 0)) AS CountEmployeesBOP]
,SUM(IIF((e.[DateHired] <= @MonthEOP) AND
(e.[DateTerminated] >= @MonthEOP), 1, 0)) AS [CountEmployeesEOP]
,SUM(IIF(e.[DateTerminated] BETWEEN @MonthBOP AND @MonthEOP, 1, 0))
AS [CountTerminations]
FROM
[Reports].[vPaycomEmployee] e
WHERE
((e.[DateHired] <= @MonthEOP) OR
(e.[DateTerminated] > @MonthBOP)) AND
((e.[GLRegionWHID] IN (@GLRegionsWHID)) OR
(-1 IN (@GLRegionsWHID)))
GROUP BY
e.[GLRegion]
,e.[GLRegionWHID]
,e.[GLProgram]
,e.[GLProgramWHID]
,e.[DOLStatus]
,e.[DOLStatusWHID]
,e.[TerminationType]
,e.[TerminationReason]
HAVING
(SUM(IIF((e.[DateHired] <= @MonthBOP) AND
(e.[DateTerminated] >= @MonthBOP), 1, 0)) > 0)
Может кто знает как написать его без Group By?
Group By этот делает расчеты не совсем правильными.
(Тестирование подтвердило это), поэтому велели избавиться от Group By; a я не знаю как -так чтобы не выдавало ошибку
DECLARE @MonthBOP date = '07-01-2017'
DECLARE @MonthEOP date = '02-28-2018'
DECLARE @GLRegionsWHID int = -1
SELECT
e.[GLRegion]
,e.[GLRegionWHID]
,e.[GLProgram]
,e.[GLProgramWHID]
,e.[DOLStatus]
,e.[DOLStatusWHID]
,e.[TerminationType]
,e.[TerminationReason]
,SUM(IIF((e.[DateHired] <= @MonthBOP) AND
(e.[DateTerminated] >= @MonthBOP), 1, 0)) AS CountEmployeesBOP]
,SUM(IIF((e.[DateHired] <= @MonthEOP) AND
(e.[DateTerminated] >= @MonthEOP), 1, 0)) AS [CountEmployeesEOP]
,SUM(IIF(e.[DateTerminated] BETWEEN @MonthBOP AND @MonthEOP, 1, 0))
AS [CountTerminations]
FROM
[Reports].[vPaycomEmployee] e
WHERE
((e.[DateHired] <= @MonthEOP) OR
(e.[DateTerminated] > @MonthBOP)) AND
((e.[GLRegionWHID] IN (@GLRegionsWHID)) OR
(-1 IN (@GLRegionsWHID)))
GROUP BY
e.[GLRegion]
,e.[GLRegionWHID]
,e.[GLProgram]
,e.[GLProgramWHID]
,e.[DOLStatus]
,e.[DOLStatusWHID]
,e.[TerminationType]
,e.[TerminationReason]
HAVING
(SUM(IIF((e.[DateHired] <= @MonthBOP) AND
(e.[DateTerminated] >= @MonthBOP), 1, 0)) > 0)
-
- Уже с Приветом
- Posts: 8239
- Joined: 06 Feb 2002 10:01
- Location: NJ, USA
Re: Код на T-SQL - нужно переписать не используя Group By clause
Как вы собираетесь суммировать что-то без использования группировки?
-
- Уже с Приветом
- Posts: 11019
- Joined: 15 May 2002 02:09
- Location: Boston, MA
-
- Уже с Приветом
- Posts: 4309
- Joined: 15 Jul 2015 03:22
Re: Код на T-SQL - нужно переписать не используя Group By clause
Вы правы, про группировку...
Там просто этот запрос пойдет в SSRS, а в нем группировки и суммирования в отдельном режиме делаются!
Надо было просто literally убрать group by & sum, и сделать это в ssrs.
Спасибо, problem solved!
-
- Уже с Приветом
- Posts: 11019
- Joined: 15 May 2002 02:09
- Location: Boston, MA
Re: Код на T-SQL - нужно переписать не используя Group By clause
как то у вас все запутано ...
ну рас солвд, значит солвд.
-
- Уже с Приветом
- Posts: 4309
- Joined: 15 Jul 2015 03:22
Re: Код на T-SQL - нужно переписать не используя Group By clause
Я сильно новичек в SQL I в SSRS.ie wrote: ↑28 Mar 2018 19:58как то у вас все запутано ...
ну рас солвд, значит солвд.
Может не понятно обьясняю.
Этот код использовался для SSRS отчета
Если протестировать данные, не используя Group by - из а просто выбрать определенные поля, задав условия и потом вручную посчитать - то цифры будут отличаться от тех что появляются после запуска этого кода.
Но в SSRS есть свои инструменты для Sum () и group by ().
Поэтому чтобы не группировать 2жды - раз в sql коде и еще раз в самом отчете, то нужно убрать Sum() и Group by() из кода, когда копируешь его в ssrs.
И сделать эти операции средствами ssrs.
Тогда все работает правильно и цифры совпадают.
×××
Я зря задала вопрос, тк находилась в процессе разбора проблемы и - не правильно и не все сформулировала (указала не всю инфу в вопросе).
Вопрос снимается
-
- Уже с Приветом
- Posts: 11019
- Joined: 15 May 2002 02:09
- Location: Boston, MA
Re: Код на T-SQL - нужно переписать не используя Group By clause
ну вот.. так всегда, только понимашь начали разговаривать.. а тут вопрос оказывается снимается, двери закрываются...
-
- Уже с Приветом
- Posts: 4309
- Joined: 15 Jul 2015 03:22
Re: Код на T-SQL - нужно переписать не используя Group By clause
-
- Уже с Приветом
- Posts: 11019
- Joined: 15 May 2002 02:09
- Location: Boston, MA
Re: Код на T-SQL - нужно переписать не используя Group By clause
а как на счет ре-юзабилити? вот в след раз вам потребуется эти же калькуляции для нового репорта,
что будем делать? опять все повторять в SSRS?
-
- Уже с Приветом
- Posts: 4309
- Joined: 15 Jul 2015 03:22
Re: Код на T-SQL - нужно переписать не используя Group By clause
В ssrs там 2 кнопки (условно) чтобы повторить. Сам рисунок отчета конечно сохранен как template. И уже не раз использовала разные templates - та самая ре-юзабилити.ie wrote: ↑28 Mar 2018 21:09а как на счет ре-юзабилити? вот в след раз вам потребуется эти же калькуляции для нового репорта,
что будем делать? опять все повторять в SSRS?
Ну и коды конечно - есть полные версии для ssms. А есть те что в ssrs.
Иногда один и тот же код везде.
Зависит от конечной цели и запросов клиента'... ...
-
- Уже с Приветом
- Posts: 23804
- Joined: 05 Jul 2003 22:34
- Location: Брест -> St. Louis, MO
Re: Код на T-SQL - нужно переписать не используя Group By clause
Надо понимать что SSRS медленнее группирует чем SQL, больше данных идет по проводу. Но кого это интересует
Вообще SSRS генератор настолько тормозной что все что можно лучше уже отформатировать и приготовить в SQL
Вообще SSRS генератор настолько тормозной что все что можно лучше уже отформатировать и приготовить в SQL
Лучше водки — хуже нет! ©
-
- Уже с Приветом
- Posts: 4667
- Joined: 07 Apr 2018 15:16
Re: Код на T-SQL - нужно переписать не используя Group By clause
Это звучит очень необычно и возможно указывает на какую-то ошибку в логике расчетаNtNet wrote: ↑28 Mar 2018 20:21 Если протестировать данные, не используя Group by - из а просто выбрать определенные поля, задав условия и потом вручную посчитать - то цифры будут отличаться от тех что появляются после запуска этого кода.
Но в SSRS есть свои инструменты для Sum () и group by ().
Поэтому чтобы не группировать 2жды - раз в sql коде и еще раз в самом отчете, то нужно убрать Sum() и Group by() из кода, когда копируешь его в ssrs.
И сделать эти операции средствами ssrs.
Тогда все работает правильно и цифры совпадают.
Не должно быть разницы между SsRS и SQL
-
- Уже с Приветом
- Posts: 4309
- Joined: 15 Jul 2015 03:22
Re: Код на T-SQL - нужно переписать не используя Group By clause
В SSRS кроме обычного datasets - который вы можете создать и вставить туда свой код, есть еще и нарисованная таблица (chart, graph etc.) где есть поля, а в них раздел f* - куда можно вставить формулы.deev_a_v wrote: ↑07 Apr 2018 15:22Это звучит очень необычно и возможно указывает на какую-то ошибку в логике расчетаNtNet wrote: ↑28 Mar 2018 20:21 Если протестировать данные, не используя Group by - из а просто выбрать определенные поля, задав условия и потом вручную посчитать - то цифры будут отличаться от тех что появляются после запуска этого кода.
Но в SSRS есть свои инструменты для Sum () и group by ().
Поэтому чтобы не группировать 2жды - раз в sql коде и еще раз в самом отчете, то нужно убрать Sum() и Group by() из кода, когда копируешь его в ssrs.
И сделать эти операции средствами ssrs.
Тогда все работает правильно и цифры совпадают.
Не должно быть разницы между SsRS и SQL
И, если использовать например формулы в коде + добавить эту же формулу в само поле - внутрь f* - то расчет будет не верный, т.к. получится что формула используется дважды.
Я лично проверяла.
Тоже, (не уверена 100%) справедливо и для grouping. Если использовать group by в самом коде в ssrs и в grouping области ssrs то как минимум отчет будет медленно работать, из-за double grupping.
×××
Что будет (и будет ли вообще работать отчет) - если не вставлять формулы в f* внутрь полей, я еще не пробовала.
Но кажется отчет требует вставлять формулы именно в саму таблицу и тд. Иначе не будет работать
Это мне надо мне проверить.
***
Пока получается что ssrs и sql код (В том смысле, в кот. я привела пример) - не совсем одно и тоже.
Мои очень опытные программеры сотрудники это подтверждают.
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Re: Код на T-SQL - нужно переписать не используя Group By clause
Возможны отличия в младших знаках, округление итд. Но лучше расчеты делать в SQL, а презентацию оставить reporting.
Кончено, если речь о том чтобы быстро поправить и забыть, то можно и так. Но если глобально и надолго - надо рыть и четко понять, что не так.
Пока вы замели проблему под ковер
Кончено, если речь о том чтобы быстро поправить и забыть, то можно и так. Но если глобально и надолго - надо рыть и четко понять, что не так.
Пока вы замели проблему под ковер
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 23804
- Joined: 05 Jul 2003 22:34
- Location: Брест -> St. Louis, MO
Re: Код на T-SQL - нужно переписать не используя Group By clause
Там еще и с производительностью есть проблемы
Мы заметили SSRS тормозит даже на простейших формулах презентации, даже это иногда лучше на сервере делать
СтопудовоПока вы замели проблему под ковер
Лучше водки — хуже нет! ©
-
- Уже с Приветом
- Posts: 4309
- Joined: 15 Jul 2015 03:22
Re: Код на T-SQL - нужно переписать не используя Group By clause
Чтобы не тормозил отчет, мы убираем group by из кода. А группируем в самом отчете. Ничего не тормозит, и так было и до моего прихода.
Иногда тормозил отчет - Если group by и в коде, и в отчете.
Но я попробую - вставить код в datasets и не трогать саму таблицу вообще. Посмотрю что будет. И возможно ли это.
×××
Иногда тормозил отчет - Если group by и в коде, и в отчете.
Но я попробую - вставить код в datasets и не трогать саму таблицу вообще. Посмотрю что будет. И возможно ли это.
×××
-
- Уже с Приветом
- Posts: 4309
- Joined: 15 Jul 2015 03:22
Re: Код на T-SQL - нужно переписать не используя Group By clause
Кстати, даже сейчас навскидку - не понятно как? можно использовать group by только в коде (И совсем не использовать grouping tools в ssrs)Dmitry67 wrote: ↑08 Apr 2018 21:14 Возможны отличия в младших знаках, округление итд. Но лучше расчеты делать в SQL, а презентацию оставить reporting.
Кончено, если речь о том чтобы быстро поправить и забыть, то можно и так. Но если глобально и надолго - надо рыть и четко понять, что не так.
Пока вы замели проблему под ковер
Для chart ili line graph report это возможно. Мы там особо grouping не использовали. А tablix report? Там же без report grouping никак. Если, например нужно создать заголовок и подзаголовок поля.
Или вы имеете ввиду что grouping tools в отчете не должны влиять на group by в коде и расчеты не должны меняться, иначе ошибка в коде?
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Re: Код на T-SQL - нужно переписать не используя Group By clause
Я к тому что результат group by в SQL и в SSRS должны совпадать
Если это не так то это Red Flag и надо разбираться почему имеено они не совпадают
Если это не ошибка округления младших знаков, значит это какая то существенная проблема, которая может где то еще выстрелить очень больно
Если это не так то это Red Flag и надо разбираться почему имеено они не совпадают
Если это не ошибка округления младших знаков, значит это какая то существенная проблема, которая может где то еще выстрелить очень больно
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014