sulomila Ответов: 3

Как исправить мой запрос?


У меня есть 3 таблицы компании, покупки и продажи.
CREATE table tblCompany (CompanyID int, Company varchar(50))

INSERT INTO tblCompany (CompanyID, Company) VALUES (1, 'ABC')

CREATE table tblPurchases (TranID int, CompanyID int, PurQty int)

INSERT INTO tblPurchases (TranID, CompanyID, PurQty) VALUES (1, 1, 774)
INSERT INTO tblPurchases (TranID, CompanyID, PurQty) VALUES (2, 1, 351)
INSERT INTO tblPurchases (TranID, CompanyID, PurQty) VALUES (3, 1, 600)
INSERT INTO tblPurchases (TranID, CompanyID, PurQty) VALUES (4, 1, 500)
INSERT INTO tblPurchases (TranID, CompanyID, PurQty) VALUES (5, 1, 501)

CREATE table tblSales (TranID int, CompanyID int, SaleQty int)

INSERT INTO tblSales (TranID, CompanyID, SaleQty) VALUES (1, 1, 2726)

Мне нужен правильный баланс количеств.

CompanyID, TPurQty, TSaleQty, BalanceQty
1 , 2726 , 2726 , 0

Но это выглядит так:
1 , 2726 ,13630 ,-10904

Где ошибка в запросе?

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

SELECT C.CompanyID, ISNULL(SUM(P.PurQty),0) TPurQty, ISNULL(SUM(S.SaleQty),0) TSaleQty
	, (ISNULL(SUM(P.PurQty),0) - ISNULL(SUM(S.SaleQty),0)) BalanceQty   FROM tblCompany C
	FULL OUTER JOIN tblPurchases P ON C.CompanyID = P.CompanyID
		FULL OUTER JOIN tblSales S ON P.CompanyID = S.CompanyID
GROUP by C.CompanyID

Santosh kumar Pithani

Как я знаю, одно значение (2726) повторяется, то есть 1..n строк далее вы делаете сумму на нем, как (2726 * N строк в таблице).я предлагаю вам использовать "sum(distinct columnname)"

Santosh kumar Pithani

какие условия?

3 Ответов

Рейтинг:
25

Santosh kumar Pithani

SELECT  C.CompanyID
       ,P.PurQty             AS TPurQty
       ,S.SaleQty            AS TSaleQty
       ,P.PurQty- S.SaleQty  AS BalanceQty  

      FROM tblCompany C
             inner JOIN (
     select CompanyID,
            sum(ISNULL(PurQty,0)) as PurQty 
      FROM tblPurchases GROUP BY CompanyID
                        )AS P ON C.CompanyID = P.CompanyID

	     inner JOIN (
    select CompanyID,
        SUM(ISNULL(SaleQty,0)) AS SaleQty
   FROM tblSales GROUP BY CompanyID 
                       ) AS S  ON P.CompanyID = S.CompanyID


sulomila

спасибо.

Santosh kumar Pithani

:-)

Рейтинг:
2

Member 11621026

SELECT C.CompanyID, ISNULL(SUM(P.PurQty),0) TPurQty, ISNULL(S.SaleQty,0) TSaleQty
	, (ISNULL(SUM(P.PurQty),0) - ISNULL(S.SaleQty,0)) BalanceQty   FROM #tblCompany C
	FULL OUTER JOIN #tblPurchases P ON C.CompanyID = P.CompanyID
		FULL OUTER JOIN #tblSales S ON P.CompanyID = S.CompanyID
GROUP by C.CompanyID,s.SaleQty


sulomila

никакое изменение. Те Же Результаты.

Рейтинг:
2

Member 11621026

Но мой результат верен.
можете ли вы сказать мне, за каким старшим вы следуете


CHill60

Не публикуйте комментарии или вопросы в качестве решений - используйте функцию "есть вопрос или комментарий?" ссылка рядом с сообщением или ссылка "ответить" рядом с комментарием