Я тестировал SQL Server 2005, поэтому, пожалуйста, не понижайте его, если он вообще не работает, просто дайте мне знать, и я удалю свой ответ :-). Я просто пытаюсь помочь.
Рассматривайте это как пример данных (CTE в SQL Server 2005):
;with ord_det (cust_nbr, trn_dt, str_typ, trn_nbr, item_nbr, price, tax) as (
select 5551, convert(datetime, '12/22/2011', 101), 'store', 215, 12345, 10.00, 1.25 union all
select 5551, convert(datetime, '12/22/2011', 101), 'store', 215, 65715, 6.25, 0.75 union all
select 5551, convert(datetime, '12/22/2011', 101), 'store', 215, 90000, 40.00, null union all
select 6875, convert(datetime, '12/10/2011', 101), 'online', 856, 72345, 8.50, 1.00 union all
select 6875, convert(datetime, '12/10/2011', 101), 'online', 856, 65715, 6.25, 0.75 union all
select 3500, convert(datetime, '12/12/2011', 101), 'store', 402, 54123, 45.00, 4.00 union all
select 3500, convert(datetime, '12/12/2011', 101), 'store', 402, 90000, 20.00, null
)
Окончательный запрос (я предположил, что ваша таблица называется ord_det
, если она не просто использует правильное имя):
select t.cust_nbr, t.trn_dt, t.trn_nbr, price - purchase as net_cb from (
select cust_nbr, trn_dt, trn_nbr, sum(price + coalesce(tax, 0)) as purchase
from ord_det o
where item_nbr <> 90000 and str_typ = 'store'
group by cust_nbr, trn_dt, trn_nbr
) t
inner join (
select cust_nbr, trn_dt, trn_nbr, price + coalesce(tax, 0) as price
from ord_det o
where item_nbr = 90000 and str_typ = 'store'
) t1 on t.cust_nbr = t1.cust_nbr
where purchase < price
Результат:
cust_nbr trn_dt trn_nbr net_cb
5551 2011-12-22 00:00:00.000 215 21.75