У меня есть таблица, как показано ниже, после нескольких соединений
username trandate positionname ChannelID
-------- ---- ------------ ---------
system 01/01/2019 1
anderson 06/04/2019 chief 1
williams 07/03/2019 chief 2
julie 15/02/2019 technician 48
julie 27/05/2019 chief technician 21
Я хочу подсчитать общее количество транзакций, сумму, сгруппированную по месяцам, годам и типу канала.
есть условие: если channelID равен «1», то запрос должен исключать (1) транзакции с нулевым значением на «positionname» или (2) транзакции с «системным» именем пользователя.
Мой код выглядит примерно так:
select DISTINCT
DATEPART(YEAR,a.TranDate) as [year],
DATEPART(MONTH,a.TranDate) as [month],
count(*) as [transaction number],
sum(a.Amount) as [Total amount],
b.Name as [branch name],
c.ChannelName as [channel]
from transactions_main as a
left join branches as b WITH (NOLOCK) ON a.TranBranch=b.BranchId
left join Channels as c WITH (NOLOCK) ON a.ChannelId=c.ChannelId
left join Staff_Info as d WITH (NOLOCK) ON a.UserName=d.UserCode
where
a.TranDate>'20181231'
and b.name not in ('HQ')
and (a.ChannelId=1
and d.positionname is not null
and a.UserName not in ('SYSTEM', 'auto') )
group by b.Name, c.ChannelName,DATEPART(YEAR,a.TranDate), DATEPART(MONTH,a.TranDate)
order by b.Name, Year,month
В конце концов, конечно, не сработало. Я получил сумму и количество транзакций только для channelID = 1.
БОНУС: Вы хотите помочь в другой моей теме? в котором мне также нужна помощь по индексации:
определение должности сотрудника при совершении определенной операции
вот оно: ссылка
a.ChannelId = 1
, и вы, вероятно, получите больше каналов. - person Gordon Linoff   schedule 01.06.2020