我有两张桌子:
收据
我已经编写了Query,但是在第二个表中找到了一些金额
1)卖表:
Create Table Sells(
ID int,
Invone varchar (30),
InvDate DateTime ,
Year varchar (15),
Type varchar (10) ,
Terms varchar (20) ,
Days int ,
DueDate DateTime,
Pieces int ,
Carats Real ,
Price Real ,
GrossAmt Real ,
Discount1 Real ,
DisAmt1 Real ,
Discount2 Real,
DisAmt2 Real ,
FinalAmt Real,
Party varchar (100),
Party_ID int,
Person varchar (100),
Shape varchar (30),
Quality varchar (30),
StockId int,
SalesExe varchar (50),
Remarks varchar (200),
CreatedDate DateTime,
ModifiedDate DateTime,
Username varchar (50))
2)收据表:
Create Table Receipt (
ID int ,
Invone varchar (30),
RDate DateTime,
Year varchar (15),
Type varchar (10),
HKD Real,
Rate Real,
ShortAmt Real,
RecievedAmt Real,
TotalRecievedAmt Real,
FinalAmt Real,
Party varchar (100),
Party_ID int,
Remarks varchar (200),
CreatedDate DateTime,
ModifiedDate DateTime,
Username varchar (50)
)
这是我的查询:
select s.Invone,s.InvDate,s.Type,s.year,s.Terms,s.DueDate,s.Party,s.Party_ID,sum(s.Pieces) AS TotalPieces, round(sum(s.Carats), 3) AS TotalCarats, round(sum(s.GrossAmt), 2) AS TotalGrossAmt, round(sum(s.DisAmt1), 2) AS TotalDis1, round(sum(s.DisAmt2), 2) AS TotalDis2, round(sum(s.FinalAmt), 2) AS TotalFinalAmt, isnull(round(sum(HKD), 2), 0) AS TotalHKD, isnull(round(rate, 2), 0) AS Rate, isnull(round(sum(ShortAmt), 2), 0) AS TotalShort,isnull(round(sum(RecievedAmt), 2), 0) AS RecievedAmt, isnull(round(sum(TotalRecievedAmt), 2), 0) AS TotalRecievedAmt, round(sum(s.FinalAmt) - isnull(sum(TotalRecievedAmt), 0), 2) AS Balance from Sells s left join Recipt r on s.Invone = r.Invone WHERE s.Party = 'Buyer' group by s.Invone,s.InvDate,s.Party,s.Party_ID,s.Type,s.Year,s.Terms,s.DueDate,rate having (sum(s.FinalAmt) - sum(isnull(TotalRecievedAmt, 0))) 0 order by s.InvDate, s.Invone
这是我得到的输出 1:Image of Output
我需要像Invone一样的输出应该只来一次。和TotalPeices,TotalCarats,TotalGrossAmt,TotalDis1,TotalDis2,TotalFinalAmt不应该被添加2次或3次。
如果我有Invone no。销售表中有15次,而15份中有3份收据。部分付款。然后在输出TotalPeices,TotalCarats,TotalGrossAmt,TotalDis1,TotalDis2,TotalFinalAmt不应该添加3次。它应该仅显示销售总额中的TotalPeices,TotalCarats,TotalGrossAmt,TotalDis1,TotalDis2,TotalFinalAmt的总和。 从收据表中它应显示TotalHKD,TotalShort,RecievedAmt,TotalRecievedAmt
的总和答案 0 :(得分:0)
我得到了解决方案
select S.Invone,S.InvDate,S.Type,S.Year,S.Terms,S.DueDate,S.Party,S.Party_ID,S.TotalPieces,S.TotalCarats,S.TotalGrossAmt,S.TotalDis1,S.TotalDis2,S.TotalFinalAmt,isnull(R.TotalHKD,0) AS TotalHKD,isnull(R.Rate,0) AS Rate,isnull(R.TotalShort,0) AS TotalShort,isnull(R.RecievedAmt,0) AS RecievedAmt,isnull(R.TotalRecievedAmt,0) AS TotalRecievedAmt,(round(S.TotalFinalAmt - isnull(R.TotalRecievedAmt, 0), 2)) AS Balance from (select Invone, isnull(round(sum(HKD), 2), 0) AS TotalHKD,isnull(round(rate, 2), 0) AS Rate, isnull(round(sum(ShortAmt), 2), 0) AS TotalShort,isnull(round(sum(RecievedAmt), 2), 0) AS RecievedAmt, isnull(round(sum(TotalRecievedAmt), 2), 0) AS TotalRecievedAmt from Recipt group by Invone,Rate)as R right outer join (select Invone,InvDate,Type,Year,Terms,DueDate,Party,Party_ID,sum(Pieces)as TotalPieces, round(sum(Carats), 3) AS TotalCarats, round(sum(GrossAmt), 2) AS TotalGrossAmt, round(sum(DisAmt1), 2) AS TotalDis1, round(sum(DisAmt2), 2) AS TotalDis2, round(sum(FinalAmt), 2) AS TotalFinalAmt from Sells group by Invone,InvDate,Type,Year,Terms,DueDate,Party,Party_ID )as S on S.Invone=R.Invone WHERE S.TotalFinalAmt-isnull(R.TotalRecievedAmt,0) 0