SQL server 2012
Я беру полученные комиссионные и умножаю их на разные коэффициенты в зависимости от того, как долго Клиент был Клиентом. Предложение group by
довольно прямолинейно. Однако мой select
становится неудобным, когда я хочу использовать этот критерий по-разному:
select mp.professionals
,case when sl.stmndate < dateadd(year, 3, m.qClientOpenDate) then 'New' else 'Old' end age -- straight forward
,case (case when sl.stmndate < dateadd(year, 3, m.qClientOpenDate) then 'New' else 'Old' end) -- nested case
when 'New' then sum(fees) * 0.5
when 'Old' then sum(fees) * 0.25
else 0
end Credit
,case (case when sl.stmndate < dateadd(year, 3, m.qClientOpenDate) then 'New' else 'Old' end) -- nested case
when 'New' then 'Welcome!'
when 'Old' then 'Thank you for being a long-time Client!'
end Greeting
from mattersprofessionals mp
inner join matters m on m.matters = mp.matters
inner join stmnledger sl on sl.matters = mp.matters
group by mp.professionals, case when sl.stmndate < dateadd(year, 3, m.qClientOpenDate) then 'New' else 'Old' end
Полагаю, я должен упомянуть, что это упрощенная версия моих фактических case
операторов.
Я надеялся, что есть способ сгруппировать по sl.stmndate < dateadd(year, 3, m.qClientOpenDate)
как логическое значение или что-то в этом роде, чтобы мне не приходилось выполнять вложенные выражения case.
Я знаю, что могу выполнить подзапрос на basi c case, а затем выполните другие выражения case во внешнем запросе. Но это всего лишь перестановка той же концепции вложенного случая.