Зачем нужно поле в предложении GROUP BY, если оно нужно только для условного предложения WHEN? - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь создать запрос, чтобы получить результаты, подобные этой картинке ниже.

Одна строка на человека.

enter image description here

Проблема в том, что когда я создаю свой запрос, поля, которые я использую только для WHA CLAUSE (мне даже не нужно показывать их как результаты), он отображается как ошибка с просьбой добавить их в ГРУППОВАЯ ОГОВОРКА или ОБЪЕДИНЕННЫЕ ФУНКЦИИ. И, вероятно, это создает дублированные строки в моих результатах для каждого пользователя.

Мой запрос просто запускается, если я помещаю UserLogon, JobPageFormat и JobIsDuplex в предложение group.

База данных, которую я использую, MS SQL Server 2008

Пожалуйста, смотрите мой sql запрос

select UserLogon, count(TrackingId) as Jobs,

case
when JobPageFormat = 'A3' then SUM(TrackingPageCount*2)
when JobPageFormat != 'A3' then SUM(TrackingPageCount) 
end as Total_Pages, 

case
when JobPageFormat = 'A3' then SUM(TrackingColorPageCount*2)
when JobPageFormat != 'A3' then SUM(TrackingColorPageCount)
end as Color_Pages,

case
when JobPageFormat = 'A3' then (SUM(TrackingPageCount*2) - SUM(TrackingColorPageCount*2))
when JobPageFormat != 'A3' then (SUM(TrackingPageCount) - SUM(TrackingColorPageCount))
end as Mono_Pages,

case
when JobPageFormat = 'A3' and JobIsDuplex = 0 then SUM(TrackingPageCount*2)
when JobPageFormat != 'A3' and JobIsDuplex = 0 then SUM(TrackingPageCount)
end as Simplex,

case
when JobPageFormat = 'A3' and JobIsDuplex = 1 then SUM(TrackingPageCount*2)
when JobPageFormat != 'A3' and JobIsDuplex = 1 then SUM(TrackingPageCount)
end as Duplex

from scTracking 

where ComputerName like '%ServerXXX%'
and JobType in (1,2,3)
and StartDateTime > '2019-09-01'
and StartDateTime < '2019-10-01'
group by UserLogon, JobPageFormat, JobIsDuplex
order by UserLogon

Смотрите результаты, которые я получаю ниже

enter image description here

Кто-нибудь знает, как я могу выполнить этот запрос, не дублируя результаты, пожалуйста?

С уважением, Лучано

1 Ответ

2 голосов
/ 15 января 2020

Вы должны изменить свои суммы, чтобы они выходили за пределы выражения регистра:

SUM(case
    when JobPageFormat = 'A3' then TrackingPageCount
    ELSE TrackingPageCount
    end) as Total_Pages, 
SUM(CASE WHEN JobIsDuplex = 0 
        THEN
        CASE when JobPageFormat = 'A3' then TrackingPageCount*2
        ELSE TrackingPageCount
    end) as Simplex,
etc.

, тогда вы можете вывести JobPageFormat и JobIsDuplex из группы по предложению.

...