2017-02-09 147 views
0

让我首先说我不是SQL编码方面的专家。我以为我有这个查询,直到我把它放入SSRS,并注意到我的'消费'是几乎所有情况下的价值翻倍。我无法弄清楚什么是错的。我改变了连接,但从来没有得到预期的结果。这是查询。SQL语句未返回预期的确切结果

SELECT a.No_ 
     ,Sum(b.Consumption) as Consumption 
     ,sum(c.[Item Ledger Entry Quantity]) as 'Total Qty' 
     ,sum(e.Amount) as 'Total Amount' 
FROM Crest$Item a 
INNER JOIN (SELECT [Item No_] INo, Sum(Quantity) Consumption 
        FROM   [Crest$Item Ledger Entry] 
        WHERE  [Entry Type] = 5 and [Posting Date]  Between '2017-01-01' and '2017-01-31' 
        GROUP BY [Item No_]) b on a.No_ = b.INo 
INNER JOIN [Crest$Value Entry] c ON a.No_ = c.[Item No_] 
INNER JOIN [Crest$G_L - Item Ledger Relation] d on c.[Entry No_] = d.[Value Entry No_] 
INNER JOIN [Crest$G_L Entry] e ON d.[G_L Entry No_] = e.[Entry No_] 
WHERE e.[G_L Account No_] = '55130' 
     and c.[Posting Date] between '2017-01-01' and '2017-01-31' 
group by a.No_ 
order by a.No_ 

当返回的数据我已经在列的正确数据NO_,总数量和总金额,但第二列“消费”是更多的时间比没有它应该是值完全一倍。

我没有看到问题。 谢谢。

+0

似乎消费总和乘以外部查询的行数。一些休息表或在消费领域使用分组在外部查询而不是重复使用总和 – niktrs

+0

您正在使用哪些DBMS? –

+0

Microsoft SQL Server 2014 – mdebner

回答

0

如果您删除所有sum(...)函数并返回原始数据并检查它,问题的原因可能会变得明显。

如果没有原始数据或模式,我最好的猜测就是,对于所有那些你得到的条件,你最终返回2的“b”基于连接到“c”,“d”或“ e“,这是你说”多次不是“,这让我觉得这是怎么回事

修复它完全取决于问题所在,有时候可能很简单(也许你只需要得到“c”,其中某列与特定值相等),或者需要退后一步,看看它是如何结合在一起的