Код на 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
Re: Код на T-SQL - нужно переписать не используя Group By clause
поподробней можно? что значит "не совсем"?
-
- Уже с Приветом
- 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
как то у вас все запутано ...NtNet wrote: 28 Mar 2018 19:50Вы правы, про группировку...
Там просто этот запрос пойдет в SSRS, а в нем группировки и суммирования в отдельном режиме делаются!
Надо было просто literally убрать group by & sum, и сделать это в ssrs.
Спасибо, problem solved!
ну рас солвд, значит солвд.
-
- Уже с Приветом
- Posts: 4309
- Joined: 15 Jul 2015 03:22
Re: Код на T-SQL - нужно переписать не используя Group By clause
Я сильно новичек в SQL I в SSRS.ie wrote: 28 Mar 2018 19:58как то у вас все запутано ...NtNet wrote: 28 Mar 2018 19:50Вы правы, про группировку...
Там просто этот запрос пойдет в SSRS, а в нем группировки и суммирования в отдельном режиме делаются!
Надо было просто literally убрать group by & sum, и сделать это в ssrs.
Спасибо, problem solved!
ну рас солвд, значит солвд.
Может не понятно обьясняю.
Этот код использовался для 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
ну вот.. так всегда, только понимашь начали разговаривать.. а тут вопрос оказывается снимается, двери закрываются...NtNet wrote: 28 Mar 2018 20:21 Я зря задала вопрос, тк находилась в процессе разбора проблемы и - не правильно и не все сформулировала (указала не всю инфу в вопросе).
Вопрос снимается
-
- Уже с Приветом
- Posts: 4309
- Joined: 15 Jul 2015 03:22
Re: Код на T-SQL - нужно переписать не используя Group By clause
ie wrote: 28 Mar 2018 20:45ну вот.. так всегда, только понимашь начали разговаривать.. а тут вопрос оказывается снимается, двери закрываются...NtNet wrote: 28 Mar 2018 20:21 Я зря задала вопрос, тк находилась в процессе разбора проблемы и - не правильно и не все сформулировала (указала не всю инфу в вопросе).
Вопрос снимается
Я больше сама с собой тут ...общалась
Но вы мне помогли , натолкнули на мысль ))
-
- Уже с Приветом
- Posts: 11019
- Joined: 15 May 2002 02:09
- Location: Boston, MA
Re: Код на T-SQL - нужно переписать не используя Group By clause
а как на счет ре-юзабилити? вот в след раз вам потребуется эти же калькуляции для нового репорта,NtNet wrote: 28 Mar 2018 21:06ie wrote: 28 Mar 2018 20:45ну вот.. так всегда, только понимашь начали разговаривать.. а тут вопрос оказывается снимается, двери закрываются...NtNet wrote: 28 Mar 2018 20:21 Я зря задала вопрос, тк находилась в процессе разбора проблемы и - не правильно и не все сформулировала (указала не всю инфу в вопросе).
Вопрос снимается
Я больше сама с собой тут ...общалась
Но вы мне помогли , натолкнули на мысль ))
что будем делать? опять все повторять в 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а как на счет ре-юзабилити? вот в след раз вам потребуется эти же калькуляции для нового репорта,NtNet wrote: 28 Mar 2018 21:06ie wrote: 28 Mar 2018 20:45ну вот.. так всегда, только понимашь начали разговаривать.. а тут вопрос оказывается снимается, двери закрываются...NtNet wrote: 28 Mar 2018 20:21 Я зря задала вопрос, тк находилась в процессе разбора проблемы и - не правильно и не все сформулировала (указала не всю инфу в вопросе).
Вопрос снимается
Я больше сама с собой тут ...общалась
Но вы мне помогли , натолкнули на мысль ))
что будем делать? опять все повторять в 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
Там еще и с производительностью есть проблемыDmitry67 wrote: 08 Apr 2018 21:14 Возможны отличия в младших знаках, округление итд. Но лучше расчеты делать в SQL, а презентацию оставить reporting.
Мы заметили SSRS тормозит даже на простейших формулах презентации, даже это иногда лучше на сервере делать
СтопудовоПока вы замели проблему под ковер
Лучше водки — хуже нет! ©