Member 13939442 Ответов: 1

Как мне получить оставшийся sal из этих двух таблиц


У меня есть два стола

Таблица 1 Детали сал

ИДЕНТИФИКАТОР ЭМАЛЬ КУЛОН САЛ
1 Ану 10000
2 Апарна 20000
3 Ананья 15000
4 Анупама 40000
5 Амрута 20000

таблица 2 с предварительной информацией

ИДЕНТИФИКАТОР ЗАРАНЕЕ
1 1000
2 500
5 200
1 2000
2 200

Что я уже пробовал:

я хочу, чтобы вычесть сумму аванса в table2 из сал в таблице

выход:>

Идентификатор эмаль кулон remainin_SAL

1 Ану 7000
2 Апарна 19300
3 Ананья 15000
4 Анупама 40000
5 Амрута 19800

1 Ответов

Рейтинг:
0

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.ИДЕНТИФИКАТОР ТС.ЭМАЛЬ КУЛОН, ТС.Сал
Заказ по ТС.Идентификатор