Member 12245539 Ответов: 2

Как вычесть значения из разных таблиц в sqlserver


как вычесть значения из разных таблиц в SqlServer

У меня есть две таблицы dbo.Fee_Payable_to_Students и dbo. Fee_Receipt_Students

dbo. Fee_Payable_to_Students имеет значения
S_Adm_No | cls_SecId | FHeadId| Apr | May | Jun | Jul | Aug | Sep
1001     |     1     |     1  | 500 | 500 | 500 | 500 | 500 | 500
1001     |     1     |     2  | 400 | 400 | 400 | 400 | 400 | 400


dbo. Fee_Receipt_Students имеет значения
AutoGenNo|S_Adm_No | cls_SecId | FHeadId| Apr | May | Jun | Jul | Aug | Sep
1        |1001     |     1     |     1  | 100 | 100 | 100 | 100 | 100 | 100
2        |1001     |     1     |     1  | 100 | 100 | 100 | 100 | 100 | 100
3        |1001     |     1     |     1  | 100 | 100 | 100 | 100 | 100 | 100
4        |1001     |     1     |     1  | 100 | 100 | 100 | 100 | 100 | 100
5        |1001     |     1     |     2  | 100 | 100 | 100 | 100 | 100 | 100
6        |1001     |     1     |     2  | 100 | 100 | 100 | 100 | 100 | 100


Я хочу вычесть значение из таблицы Fee_Payable_to_Students
значение должно показать


dbo.Fee_Payable_to_Students has values 
S_Adm_No | cls_SecId | Apr | May | Jun | Jul | Aug | Sep
1001     |     1     | 300 | 300 | 300 | 300 | 300 | 300

2 Ответов

Рейтинг:
8

Maciej Los

Попробовать это:

DECLARE @FPS AS TABLE(S_Adm_No INT, cls_SecId INT, FHeadId INT, Apr INT, May INT, Jun INT, Jul INT, Aug INT, Sep INT)
INSERT INTO @FPS (S_Adm_No, cls_SecId, FHeadId, Apr, May, Jun, Jul, Aug, Sep)
VALUES(1001, 1, 1, 500, 500, 500, 500, 500, 500),
(1001, 1, 2, 400, 400, 400, 400, 400, 400)


DECLARE @FRS AS TABLE(AutoGenNo INT IDENTITY(1,1), S_Adm_No INT, cls_SecId INT, FHeadId INT, Apr INT, May INT, Jun INT, Jul INT, Aug INT, Sep INT)
INSERT INTO @FRS (S_Adm_No, cls_SecId, FHeadId, Apr, May, Jun, Jul, Aug, Sep)
VALUES(1001, 1, 1, 100, 100, 100, 100, 100, 100),
(1001, 1, 1, 100, 100, 100, 100, 100, 100),
(1001, 1, 1, 100, 100, 100, 100, 100, 100),
(1001, 1, 1, 100, 100, 100, 100, 100, 100),
(1001, 1, 2, 100, 100, 100, 100, 100, 100),
(1001, 1, 2, 100, 100, 100, 100, 100, 100)

SELECT FPS.S_Adm_no, FPS.cls_SecId, COALESCE(FPS.AprA,0) - COALESCE(FRS.AprB,0) AS Apr, COALESCE(FPS.MayA,0) - COALESCE(FRS.MayB,0) AS May, 
		COALESCE(FPS.JunA,0) - COALESCE(FRS.JunB,0) AS Jun, COALESCE(FPS.JulA,0) - COALESCE(FRS.JulB,0) AS Jul
FROM (
	(
		SELECT S_Adm_no, cls_SecId, SUM(Apr) AprA, SUM(May) MayA, SUM(Jun) JunA, SUM(Jul) JulA, SUM(Aug) AugA, SUM(Sep) SepA
		FROM @FPS
		GROUP BY S_Adm_no, cls_SecId
	) AS FPS
	LEFT JOIN
	(
		SELECT S_Adm_no, cls_SecId, SUM(Apr) AprB, SUM(May) MayB, SUM(Jun) JunB, SUM(Jul) JulB, SUM(Aug) AugB, SUM(Sep) SepB
		FROM @FRS
		GROUP BY S_Adm_no, cls_SecId
	) AS FRS ON FPS.S_Adm_no = FRS.S_Adm_no AND FPS.cls_SecId = FRS.cls_SecId
) 


Примечание: не стесняйтесь улучшать его!


Рейтинг:
0

OriginalGriff

Это твое домашнее задание, поэтому я не буду писать запрос за тебя.
Но это довольно просто: используйте GROUP BY для каждой таблицы, чтобы суммировать информацию, затем используйте JOIN для объединения сводок, а затем выберите результат для каждого месяца как

SUM(g1.Apr) - SUM(g2.Apr) AS Apr
Где g1 и g2-сгруппированные данные.
Если это звучит слишком сложно, начните с выбора каждой группы по очереди и возврата сводных значений (что довольно тривиально), и вы должны начать понимать, что я имею в виду.


Member 12245539

Босс, мне нужна ваша помощь, пожалуйста, посмотрите эту ссылку.....

http://www.codeproject.com/Questions/1121364/How-to-subtract-one-table-to-another-table-in-sqls