littleGreenDude
Надеюсь, я не делаю за тебя домашнее задание...
Есть 2 вещи, которые делают это немного сложным: сначала вы должны построить промежуточный запрос, который суммирует авансы и присоединяется к основной таблице. Вторая хитрость заключается в том, что вы должны убедиться, что все имена представлены в промежуточном запросе, чтобы они не были исключены соединением. Это означает учет нулей и замену их нулевым авансовым значением.
drop table #tempadvance
CREATE TABLE #tempSaldetail(
[ID] [int] NOT NULL,
[ENAME] [varchar](32) NOT NULL,
[SAL] [INT] NOT NULL
)
CREATE TABLE #tempAdvance(
[ID] [int] NOT NULL,
[ADVANCE] [int] NOT NULL
)
GO
insert into #tempSaldetail select 1, 'ANU', 10000
insert into #tempSaldetail select 2, 'APARNA', 20000
insert into #tempSaldetail select 3, 'ANANYA', 15000
insert into #tempSaldetail select 4, 'ANUPAMA', 40000
insert into #tempSaldetail select 5, 'AMRUTHA', 20000
INSERT INTO #tempAdvance SELECT 1, 1000
INSERT INTO #tempAdvance SELECT 2, 500
INSERT INTO #tempAdvance SELECT 5, 200
INSERT INTO #tempAdvance SELECT 1, 2000
INSERT INTO #tempAdvance SELECT 2, 200
SELECT s.ID, ENAME, s.Sal - (adv.totalAdvance) from #tempSaldetail s
join (select sal.id, ISNULL(sum(advance),0) as totaladvance from #tempSaldetail sal
left outer join #tempAdvance A on
sal.id = a.id group by sal.id) as adv
on adv.id = s.id
Naga Sindhura
левый внешний дает плохую производительность, когда у вас есть объемные данные. попробовать это
ВЫБЕРИТЕ TS.ID, TS.ENAME, TS.SAL - SUM(ISNULL(TA.ADVANCE,0)) 'remainin_SAL'
От #tempSaldetail TS
Левое соединение #tempAdvance та на ТА.ИД = ТС.идентификатор
группа по TS.ИДЕНТИФИКАТОР ТС.ЭМАЛЬ КУЛОН, ТС.Сал
Заказ по ТС.Идентификатор