我有以下表结构:
我正在运行以下查询;
SELECT DISTINCT c.VatCountryCode,
od.IntrastatCommodityCode,
CAST(ROUND(SUM(od.Quantity * od.UnitCost/vt.ConversionFactor),2) AS DECIMAL(12,2)) AS Value,
SUM(od.Quantity) AS Quantity
FROM Contacts c
INNER JOIN OrderHeaders oh ON c.ContactId = oh.CustomerId
INNER JOIN OrderDetails od ON oh.OrderId = od.OrderId
INNER JOIN VatTransactions vt ON c.ContactId = vt.OriginatingContactId
WHERE c.VatCountryCode <> RTRIM('GB')
AND c.ContactId = vt.originatingContactId
AND vt.VatTransactionDate Between '20160101' AND '20160229'
GROUP BY VatCountryCode,IntrastatCommodityCode
ORDER BY VatCountryCode,IntrastatCommodityCode
如图所示,结果如下:
在值和数量中返回的结果太高了,因为它应该只引用两个月的时间段,因此我猜测它实际上是从OrderDetails表中的所有记录中提取结果
InvoiceId和ContactId在VatTransactions表中引用,我用它来设置查询的日期范围。
我怀疑,但我不确定)这是一个我不应该只使用Inner Joins的情况。如果有人可以建议我尝试进行改动(以及为什么我可以将这些知识用于将来),我将非常感激
答案 0 :(得分:0)
我认为可能是这一行:
vt.VatTransactionDate Between '20160101' AND '20160229'
您正在寻找两个字符串之间的值,而不是两个数字,这可能会产生令人困惑的结果。我会尝试:
CAST(vt.VatTransactionDate AS DECIMAL(12,2)) Between 20160101 AND 20160229