Причина, по которой вы получаете ошибки в своем подзапросе, заключается в том, что он находится в проекции, поэтому он должен возвращать одно значение.Ваш подзапрос, как он есть, вернет несколько значений.Он также будет возвращать ВСЕ предыдущие транзакции без каких-либо ограничений, кроме trantype и tran_dt, что, вероятно, не то, что вы действительно хотите.
Я также предполагаю, что вы хотите получить совокупную сумму всего, так как кажется, что это имеет смыслна основании небольшого описания, которое вы предоставили.Однако я буду рад обновить мой ответ, если вы предоставите некоторую дополнительную информацию, как предлагает Гордон Линофф.
Вы можете атаковать это несколькими различными способами ...
Общее выражение таблицы (CTE):
WITH PriorPayments AS
SELECT acctnmbr, amount*commission/100 as payment from transactions where trantype=0001 and tran_dt < @startdate
SELECT trx.acctnmbr,
sum(trx.amount*trx.commission/100) as total_payment,
sum(ISNULL(pp.payment,0)) as prior_payment
FROM transactions trx
LEFT JOIN PriorPayments pp ON trx.acctnmbr=pp.acctnmbr
WHERE trx.trantype=0001
AND trx.tran_dt BETWEEN @startdate and @enddate
GROUP BY trx.acctnmbr
Подзапрос:
SELECT trx.acctnmbr,
sum(trx.amount*trx.commission/100) as total_payment,
sum(ISNULL(pp.payment,0)) as prior_payment
FROM transactions trx
LEFT JOIN (
SELECT acctnmbr, amount*commission/100 as payment from transactions where trantype=0001 and tran_dt < @startdate
) AS pp ON trx.acctnmbr=pp.acctnmbr
WHERE trx.trantype=0001
AND trx.tran_dt BETWEEN @startdate and @enddate
GROUP BY trx.acctnmbr