akhter86 Ответов: 1

Сумма трех столбцов таблицы в SQL?


у меня есть задача суммировать три таблицы

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

я сделал на столе раздел sum..но понятия не имею, как суммировать оставшиеся две таблицы...
вот мои данные и запрос ]

CREATE TABLE #Catagory (CID INT,CName VARCHAR(50))
CREATE TABLE #Sections (SecID INT,Secnam VARCHAR(50))
CREATE TABLE #ItemMasterFile(CodeItem INT,Descriptionitem VARCHAR(50),SecID INT,CID INT)
CREATE TABLE #Bigbalprd(BID INT,CodeItem INT,SecID INT,CID INT,QTY INT,Entrydate DATETIME)
CREATE TABLE #Probale(BID INT,CodeItem INT,prdQTY INT,Entrydate DATETIME)
CREATE TABLE #Employee(EID INT,SecID INT,QTY int, Entrydate DATETIME)
 
INSERT INTO #Catagory VALUES(1,'INDIA')
INSERT INTO #Catagory VALUES(2,'INDIA(Cut)')
INSERT INTO #Catagory VALUES(3,'Pakistan')
INSERT INTO #Catagory VALUES(4,'Pakistan(Cut)')
 
 
INSERT INTO #Sections VALUES(1,'HR')
INSERT INTO #Sections VALUES(2,'Baby')
INSERT INTO #Sections VALUES(3,'Ladies')
INSERT INTO #Sections VALUES(4,'Mix Rammage')
 
INSERT INTO #ItemMasterFile VALUES(1,'A',1,1)
INSERT INTO #ItemMasterFile VALUES(2,'B',2,2)
INSERT INTO #ItemMasterFile VALUES(3,'C',3,3)
INSERT INTO #ItemMasterFile VALUES(4,'D',4,null)
INSERT INTO #ItemMasterFile VALUES(5,'e',5,null)
INSERT INTO #ItemMasterFile VALUES(6,'f',6,null)
INSERT INTO #ItemMasterFile VALUES(7,'g',4,2)
INSERT INTO #ItemMasterFile VALUES(8,'h',4,3)
INSERT INTO #ItemMasterFile VALUES(9,'K',2,2)
INSERT INTO #ItemMasterFile VALUES(10,'L',4,3)
INSERT INTO #ItemMasterFile VALUES(11,'M',2,4)
 
INSERT INTO #Bigbalprd VALUES(1,1,1,1,1,'01-06-2019')
INSERT INTO #Bigbalprd VALUES(2,3,3,3,1,'02-06-2019')
INSERT INTO #Bigbalprd VALUES(3,4,null,4,1,'03-06-2019')
INSERT INTO #Bigbalprd VALUES(4,4,null,4,1,'04-06-2019')
INSERT INTO #Bigbalprd VALUES(4,5,null,4,1,'04-06-2019')

INSERT INTO #Probale VALUES(1,1,1,'01-06-2019')
INSERT INTO #Probale VALUES(2,3,1,'02-06-2019')
INSERT INTO #Probale VALUES(3,11,1,'03-06-2019')
INSERT INTO #Probale VALUES(4,10,1,'08-06-2019')
INSERT INTO #Probale VALUES(3,8,1,'03-06-2019')
INSERT INTO #Probale VALUES(4,9,1,'08-06-2019')
INSERT INTO #Probale VALUES(4,9,1,'08-06-2019')

INSERT INTO #Employee VALUES(1,1,4,'01-05-2019')
INSERT INTO #Employee VALUES(2,3,5,'02-05-2019')
INSERT INTO #Employee VALUES(3,3,3,'03-05-2019')
INSERT INTO #Employee VALUES(4,4,7,'04-05-2019')
 
DECLARE @StartDate DATETIME, @Enddate DATETIME
SET @StartDate = '01-06-2019'
SET @Enddate = '09-06-2019'
 
SELECT DISTINCT s.Secnam, ISNULL(SUM(b.prdQTY),0)QTY
FROM #ItemMasterFile i
LEFT OUTER JOIN #Probale b ON  i.CodeItem = b.CodeItem
FULL OUTER JOIN #Sections s ON i.SecID = s.SecID

WHERE (b.Entrydate BETWEEN @StartDate AND @Enddate) OR b.Entrydate IS NULL
GROUP BY  s.Secnam
 
DROP TABLE #Catagory
DROP TABLE #Sections
DROP TABLE #ItemMasterFile
DROP TABLE #Bigbalprd
Drop Table #Employee
Drop Table #Probale


вот мой вывод, который я хочу
Итого — imgbb.com[^]

Maciej Los

Можете ли вы быть более конкретным и предоставить более подробную информацию о вашей проблеме, особенно о желаемом результате?

akhter86

вот мой желаемый результат https://ibb.co/Jz98hwh

1 Ответов

Рейтинг:
8

Maciej Los

Прежде всего, а небольшой совет:
Вы можете определить переменную типа table:

DECLARE @Catagory TABLE(CID INT,CName VARCHAR(50))

Вы можете использовать более простую форму INSERT INTO заявление:
INSERT INTO @Catagory VALUES(1,'INDIA'), (2,'INDIA(Cut)'), (3,'Pakistan'), (4,'Pakistan(Cut)')


А теперь ... решение...
Попробовать это:
SELECT s.Secnam, ISNULL(SUM(b.QTY),0) BigbalQTY, ISNULL(SUM(p.prdQTY),0) ProbableQTY, ISNULL(SUM(b.QTY),0) + ISNULL(SUM(p.prdQTY),0) Total,
		(SELECT ISNULL(SUM(DISTINCT QTY),0) FROM @Employee WHERE SecID = s.SecID) EmpQTY
FROM @ItemMasterFile i
	LEFT JOIN @Probale p ON  i.CodeItem = p.CodeItem
	LEFT JOIN @Sections s ON i.SecID = s.SecID
	LEFT JOIN @Bigbalprd b  ON  i.CodeItem = b.CodeItem
WHERE (p.Entrydate BETWEEN @StartDate AND @Enddate) OR p.Entrydate IS NULL
GROUP BY  s.Secnam, s.SecID


Чтобы получить итог, вы должны "добавить" новую строку, которую вы можете достичь с помощью СОЮЗ ВСЕХ[^] заявление:
UNION ALL
SELECT 'Total', SUM(T.BigbalQTY), SUM(T.ProbableQTY), SUM(T.Total), SUM(T.EmpQTY)
FROM (
   --above query here
) AS T


Я бы предложил отбросить результат первого запроса в[^] временная таблица:
SELECT ...
INTO #tmpTable
FROM ...

Затем вы сможете упростить свой запрос в этой форме:
SELECT a.*
FROM #tmpTable a
UNION ALL
SELECT 'Total', SUM(...)
FROM #tmpTable