Код на T-SQL - нужно переписать не используя Group By clause

NtNet
Уже с Приветом
Posts: 4307
Joined: 15 Jul 2015 03:22

Код на T-SQL - нужно переписать не используя Group By clause

Post by NtNet »

Есть такой код. (см ниже)
Может кто знает как написать его без Group By?
Group By этот делает расчеты не совсем правильными.
(Тестирование подтвердило это), поэтому велели избавиться от Group By; a я не знаю как -так чтобы не выдавало ошибку

:sadcry: :sadcry:


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)
User avatar
Uzito
Уже с Приветом
Posts: 8230
Joined: 06 Feb 2002 10:01
Location: NJ, USA

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by Uzito »

Как вы собираетесь суммировать что-то без использования группировки?
User avatar
ie
Уже с Приветом
Posts: 11092
Joined: 15 May 2002 02:09
Location: Boston, MA

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by ie »

NtNet wrote: 28 Mar 2018 07:31 Group By этот делает расчеты не совсем правильными.

поподробней можно? что значит "не совсем"?
NtNet
Уже с Приветом
Posts: 4307
Joined: 15 Jul 2015 03:22

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by NtNet »

ie wrote: 28 Mar 2018 13:59
NtNet wrote: 28 Mar 2018 07:31 Group By этот делает расчеты не совсем правильными.

поподробней можно? что значит "не совсем"?
Вы правы, про группировку...
Там просто этот запрос пойдет в SSRS, а в нем группировки и суммирования в отдельном режиме делаются!

Надо было просто literally убрать group by & sum, и сделать это в ssrs.

Спасибо, problem solved!
User avatar
ie
Уже с Приветом
Posts: 11092
Joined: 15 May 2002 02:09
Location: Boston, MA

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by ie »

NtNet wrote: 28 Mar 2018 19:50
ie wrote: 28 Mar 2018 13:59
NtNet wrote: 28 Mar 2018 07:31 Group By этот делает расчеты не совсем правильными.

поподробней можно? что значит "не совсем"?
Вы правы, про группировку...
Там просто этот запрос пойдет в SSRS, а в нем группировки и суммирования в отдельном режиме делаются!

Надо было просто literally убрать group by & sum, и сделать это в ssrs.

Спасибо, problem solved!
как то у вас все запутано ... :upset:
ну рас солвд, значит солвд.
NtNet
Уже с Приветом
Posts: 4307
Joined: 15 Jul 2015 03:22

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by NtNet »

ie wrote: 28 Mar 2018 19:58
NtNet wrote: 28 Mar 2018 19:50
ie wrote: 28 Mar 2018 13:59
NtNet wrote: 28 Mar 2018 07:31 Group By этот делает расчеты не совсем правильными.

поподробней можно? что значит "не совсем"?
Вы правы, про группировку...
Там просто этот запрос пойдет в SSRS, а в нем группировки и суммирования в отдельном режиме делаются!

Надо было просто literally убрать group by & sum, и сделать это в ssrs.

Спасибо, problem solved!
как то у вас все запутано ... :upset:
ну рас солвд, значит солвд.
Я сильно новичек в SQL I в SSRS.
Может не понятно обьясняю.

Этот код использовался для SSRS отчета

Если протестировать данные, не используя Group by - из а просто выбрать определенные поля, задав условия и потом вручную посчитать - то цифры будут отличаться от тех что появляются после запуска этого кода.

Но в SSRS есть свои инструменты для Sum () и group by ().
Поэтому чтобы не группировать 2жды - раз в sql коде и еще раз в самом отчете, то нужно убрать Sum() и Group by() из кода, когда копируешь его в ssrs.
И сделать эти операции средствами ssrs.

Тогда все работает правильно и цифры совпадают.

×××
Я зря задала вопрос, тк находилась в процессе разбора проблемы и - не правильно и не все сформулировала (указала не всю инфу в вопросе).

Вопрос снимается
User avatar
ie
Уже с Приветом
Posts: 11092
Joined: 15 May 2002 02:09
Location: Boston, MA

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by ie »

NtNet wrote: 28 Mar 2018 20:21 Я зря задала вопрос, тк находилась в процессе разбора проблемы и - не правильно и не все сформулировала (указала не всю инфу в вопросе).
Вопрос снимается
ну вот.. так всегда, только понимашь начали разговаривать.. а тут вопрос оказывается снимается, двери закрываются... :kofe:
NtNet
Уже с Приветом
Posts: 4307
Joined: 15 Jul 2015 03:22

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by NtNet »

ie wrote: 28 Mar 2018 20:45
NtNet wrote: 28 Mar 2018 20:21 Я зря задала вопрос, тк находилась в процессе разбора проблемы и - не правильно и не все сформулировала (указала не всю инфу в вопросе).
Вопрос снимается
ну вот.. так всегда, только понимашь начали разговаривать.. а тут вопрос оказывается снимается, двери закрываются... :kofe:
:mrgreen:
Я больше сама с собой тут ...общалась
Но вы мне помогли , натолкнули на мысль ))
User avatar
ie
Уже с Приветом
Posts: 11092
Joined: 15 May 2002 02:09
Location: Boston, MA

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by ie »

NtNet wrote: 28 Mar 2018 21:06
ie wrote: 28 Mar 2018 20:45
NtNet wrote: 28 Mar 2018 20:21 Я зря задала вопрос, тк находилась в процессе разбора проблемы и - не правильно и не все сформулировала (указала не всю инфу в вопросе).
Вопрос снимается
ну вот.. так всегда, только понимашь начали разговаривать.. а тут вопрос оказывается снимается, двери закрываются... :kofe:
:mrgreen:
Я больше сама с собой тут ...общалась
Но вы мне помогли , натолкнули на мысль ))
а как на счет ре-юзабилити? вот в след раз вам потребуется эти же калькуляции для нового репорта,
что будем делать? опять все повторять в SSRS?
NtNet
Уже с Приветом
Posts: 4307
Joined: 15 Jul 2015 03:22

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by NtNet »

ie wrote: 28 Mar 2018 21:09
NtNet wrote: 28 Mar 2018 21:06
ie wrote: 28 Mar 2018 20:45
NtNet wrote: 28 Mar 2018 20:21 Я зря задала вопрос, тк находилась в процессе разбора проблемы и - не правильно и не все сформулировала (указала не всю инфу в вопросе).
Вопрос снимается
ну вот.. так всегда, только понимашь начали разговаривать.. а тут вопрос оказывается снимается, двери закрываются... :kofe:
:mrgreen:
Я больше сама с собой тут ...общалась
Но вы мне помогли , натолкнули на мысль ))
а как на счет ре-юзабилити? вот в след раз вам потребуется эти же калькуляции для нового репорта,
что будем делать? опять все повторять в SSRS?
В ssrs там 2 кнопки (условно) чтобы повторить. Сам рисунок отчета конечно сохранен как template. И уже не раз использовала разные templates - та самая ре-юзабилити.

Ну и коды конечно - есть полные версии для ssms. А есть те что в ssrs.
Иногда один и тот же код везде.
Зависит от конечной цели и запросов клиента'... ...
User avatar
katit
Уже с Приветом
Posts: 23960
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by katit »

Надо понимать что SSRS медленнее группирует чем SQL, больше данных идет по проводу. Но кого это интересует :)

Вообще SSRS генератор настолько тормозной что все что можно лучше уже отформатировать и приготовить в SQL
Лучше водки — хуже нет! ©
deev_a_v
Уже с Приветом
Posts: 4660
Joined: 07 Apr 2018 15:16

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by deev_a_v »

NtNet wrote: 28 Mar 2018 20:21 Если протестировать данные, не используя Group by - из а просто выбрать определенные поля, задав условия и потом вручную посчитать - то цифры будут отличаться от тех что появляются после запуска этого кода.

Но в SSRS есть свои инструменты для Sum () и group by ().
Поэтому чтобы не группировать 2жды - раз в sql коде и еще раз в самом отчете, то нужно убрать Sum() и Group by() из кода, когда копируешь его в ssrs.
И сделать эти операции средствами ssrs.

Тогда все работает правильно и цифры совпадают.
Это звучит очень необычно и возможно указывает на какую-то ошибку в логике расчета
Не должно быть разницы между SsRS и SQL
NtNet
Уже с Приветом
Posts: 4307
Joined: 15 Jul 2015 03:22

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by NtNet »

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
В SSRS кроме обычного datasets - который вы можете создать и вставить туда свой код, есть еще и нарисованная таблица (chart, graph etc.) где есть поля, а в них раздел f* - куда можно вставить формулы.
И, если использовать например формулы в коде + добавить эту же формулу в само поле - внутрь f* - то расчет будет не верный, т.к. получится что формула используется дважды.
Я лично проверяла.

Тоже, (не уверена 100%) справедливо и для grouping. Если использовать group by в самом коде в ssrs и в grouping области ssrs то как минимум отчет будет медленно работать, из-за double grupping.


×××
Что будет (и будет ли вообще работать отчет) - если не вставлять формулы в f* внутрь полей, я еще не пробовала.
Но кажется отчет требует вставлять формулы именно в саму таблицу и тд. Иначе не будет работать

Это мне надо мне проверить.

***
Пока получается что ssrs и sql код (В том смысле, в кот. я привела пример) - не совсем одно и тоже.
Мои очень опытные программеры сотрудники это подтверждают.
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by Dmitry67 »

Возможны отличия в младших знаках, округление итд. Но лучше расчеты делать в SQL, а презентацию оставить reporting.

Кончено, если речь о том чтобы быстро поправить и забыть, то можно и так. Но если глобально и надолго - надо рыть и четко понять, что не так.

Пока вы замели проблему под ковер
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
katit
Уже с Приветом
Posts: 23960
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by katit »

Dmitry67 wrote: 08 Apr 2018 21:14 Возможны отличия в младших знаках, округление итд. Но лучше расчеты делать в SQL, а презентацию оставить reporting.
Там еще и с производительностью есть проблемы
Мы заметили SSRS тормозит даже на простейших формулах презентации, даже это иногда лучше на сервере делать
Пока вы замели проблему под ковер
Стопудово
Лучше водки — хуже нет! ©
NtNet
Уже с Приветом
Posts: 4307
Joined: 15 Jul 2015 03:22

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by NtNet »

Чтобы не тормозил отчет, мы убираем group by из кода. А группируем в самом отчете. Ничего не тормозит, и так было и до моего прихода.
Иногда тормозил отчет - Если group by и в коде, и в отчете.

Но я попробую - вставить код в datasets и не трогать саму таблицу вообще. Посмотрю что будет. И возможно ли это.

×××
NtNet
Уже с Приветом
Posts: 4307
Joined: 15 Jul 2015 03:22

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by NtNet »

Dmitry67 wrote: 08 Apr 2018 21:14 Возможны отличия в младших знаках, округление итд. Но лучше расчеты делать в SQL, а презентацию оставить reporting.

Кончено, если речь о том чтобы быстро поправить и забыть, то можно и так. Но если глобально и надолго - надо рыть и четко понять, что не так.

Пока вы замели проблему под ковер
Кстати, даже сейчас навскидку - не понятно как? можно использовать group by только в коде (И совсем не использовать grouping tools в ssrs)

Для chart ili line graph report это возможно. Мы там особо grouping не использовали. А tablix report? Там же без report grouping никак. Если, например нужно создать заголовок и подзаголовок поля.

Или вы имеете ввиду что grouping tools в отчете не должны влиять на group by в коде и расчеты не должны меняться, иначе ошибка в коде?
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Re: Код на T-SQL - нужно переписать не используя Group By clause

Post by Dmitry67 »

Я к тому что результат group by в SQL и в SSRS должны совпадать
Если это не так то это Red Flag и надо разбираться почему имеено они не совпадают
Если это не ошибка округления младших знаков, значит это какая то существенная проблема, которая может где то еще выстрелить очень больно
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014

Return to “Вопросы и новости IT”