Я повторно публикую свой исходный вопрос с изменениями, поскольку на этот вопрос был дан ответ и выбран лучший ответ.
Платежи поступают от нашего поставщика, который идет на счета, и представители получаютОплачивается в зависимости от того, какой счет получил, сколько.
Customers Table (Usage is kwH)
+----+----------+------------+----------+----------+----------+-------+-------+
| ID | Customer | Account_no | Meter_no | Supplier | Active | Usage | Repid |
+----+----------+------------+----------+----------+----------+-------+-------+
| 1 | Joe | 123 | 111 | NSTAR | active | 20 | 100 |
| 2 | Joe | 123 | 222 | NSTAR | active | 30 | 100 |
| 3 | Joe | 123 | 150 | NSTAR | inactive | 60 | 100 |
| 4 | Sam | 456 | 352 | SEP | active | 50 | 100 |
| 5 | Jill | 789 | 222 | FES | active | 40 | 200 |
| 6 | Mike | 883 | 150 | ABB | inactive | 40 | 200 |
+----+----------+------------+----------+----------+----------+-------+-------+
Payment_Receive (table)
+------------+----------+-------------+-------------+
| Account_no | Supplier | Amount_paid | PaymentDate |
+------------+----------+-------------+-------------+
| 123 | NSTAR | 20 | 2011-11-01 |
| 456 | SEP | 40 | 2011-11-01 |
| 456 | SEP | -40 | 2011-11-01 |
| 456 | SEP | 40 | 2011-11-01 |
| 789 | FES | 50 | 2011-11-01 |
| 883 | ABB | 30 | 2011-11-01 |
+------------+----------+-------------+-------------+
Две таблицы используются для повторных выплат.Оплата принимается для каждой учетной записи, они сопоставляются с нашими клиентами на основе Account_No и поставщика.У нас нет контроля над payment_table, потому что он приходит извне.Это создает определенные проблемы, потому что мы не можем сделать однозначное соответствие между двумя таблицами.Оставляя это в стороне, я хотел бы рассчитать выплату для RepID = 100 с определенными критериями.Это вывод, который я хотел бы видеть для RepId = 100
+------------+----------+-------------+-------------+-------------+
| Account_no | Supplier | Amount_paid | Usage | PaymentDate |
+------------+----------+-------------+-------------+-------------+
| 123 | NSTAR | 20 | 60* | 2011-11-01 |
| 456 | SEP | 40 | 50 | 2011-11-01 |
| 456 | SEP | -40 | 40 | 2011-11-01 |
| 456 | SEP | 40 | 40 | 2011-11-01 |
+------------+----------+-------------+-------------+-------------+
Обратите внимание, что
- Account_no 123 существует трижды в таблице клиентов, он должен отображаться один раз в повторной выплате
- 3 суммы были выплачены на account_no 456, все три должны быть указаны в отчете
- * 60 = Обратите внимание, что есть 2 активные записи (и одна неактивная).Это может быть сумма двух активных.Но любое другое значение является приемлемым, если это облегчает запрос (для большего из двух или одного, а не другого)
- Обратите внимание, что столбец использования должен появиться в выходной таблице. Это столбец, который создает проблему длямне.Если я не включу это, все будет работать нормально.
- Точка с колонкой Usage, если у меня есть две записи для одного и того же клиента с одинаковыми Account_No и Supplier, но разным использованием, что делает эти две записи разными, когда я включаю столбец использования.Таким образом, не удается удалить этот дубликат. Different не работает.
Отчеты рассчитываются ежемесячно
Сценарий вопроса
create database testcase
go
use testcase
go
create table customers (
id int not null primary key identity,
customer_name varchar(25),
account_no int,
meter_no int,
supplier varchar(20),
active varchar(20),
usage int,
repid int
)
create table payments_received (
account_no int,
supplier varchar(20),
amount_paid float,
paymentdate smalldatetime
)
insert into customers values('Joe',123, 111,'NSTAR','active',20,100)
insert into customers values('Joe',123, 222,'NSTAR','active',30, 100)
insert into customers values('Joe',123, 150,'NSTAR','inactive',60,100)
insert into customers values('Sam',456, 352,'SEP','active',40,100)
insert into customers values('Jill',789, 222,'FES','active',40,200)
insert into customers values('Mike',883, 150,'ABB','inactive',40,200)
select * from customers
insert into payments_received values(123,'NSTAR',20,'2011-11-01')
insert into payments_received values(456,'SEP',40,'2011-11-01')
insert into payments_received values(456,'SEP',-40,'2011-11-01')
insert into payments_received values(456,'SEP',40,'2011-11-01')
insert into payments_received values(789,'FES',50,'2011-11-01')
insert into payments_received values(883,'ABB',30,'2011-11-01')
select * from payments_received