【发布时间】:2016-03-30 10:02:30
【问题描述】:
我有两个表:
- 出售
- 列表项
收据
我已经编写了查询,但是添加了一些金额,因为它在第二个表中找到
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)
)
这是我的查询:
选择 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 余额 从卖 s left join Recipt r on s.Invone = r.Invone WHERE s.Party = 'Buyer' 按 s.Invone,s.InvDate,s.Party,s.Party_ID,s.Type,s.Year,s.Terms,s.DueDate,rate 分组 有 (sum(s.FinalAmt) - sum(isnull(TotalRecievedAmt, 0))) 0 按 s.InvDate、s.Invone 排序这是我得到的输出 1:Image of Output
我要求像 Invone 这样的输出应该只出现一次。并且 TotalPeices、TotalCarats、TotalGrossAmt、TotalDis1、TotalDis2、TotalFinalAmt 不应添加 2 次或 3 次。
如果我有 Invone 没有。 15 两次在销售表和 3 次 15 号收据。部分付款。然后在输出 TotalPeices、TotalCarats、TotalGrossAmt、TotalDis1、TotalDis2、TotalFinalAmt 不应添加 3 次。它应该只显示来自销售表的 TotalPeices、TotalCarats、TotalGrossAmt、TotalDis1、TotalDis2、TotalFinalAmt 的总和。 从收据表中应显示 TotalHKD、TotalShort、RecievedAmt、TotalRecievedAmt 的总和
【问题讨论】:
-
您需要从 GROUP BY 中删除 s.GrossAmt。当您显示它的总和时,您也在 GROUP BY 中使用 s.FinalAmt
-
我尝试删除 s.FinalAmt 和 s.GrossAmt,但还是会出现相同的答案
-
您要求我们做很多工作来理解您的查询。您能否发布两个表格的示例数据,预期结果和实际结果?理想情况下使用sqlfiddle.com,这样我们就可以处理查询,而不是做家务。
-
我已经让它变得简单。请告诉我解决方案
标签: sql sql-server sql-server-2008 sql-query-store