0
我需要计算年初至今和去年YTD在一张表[SQL Server 2012]上。以下是我试过的查询。在某些情况下,它会增加一倍和三倍。SQL YTD和去年YTD完整数据
SELECT SUM(A.RevisionNumber)YTD,SUM(P.RevisionNumber)LY_YTD,B.OrderDateM,B.OrderDateY
FROM
(select MONTH(OrderDate)OrderDateM,YEAR(OrderDate)OrderDateY from sales.SalesOrderHeader B
group by MONTH(OrderDate),YEAR(OrderDate))B
LEFT JOIN
(select SUM(RevisionNumber)RevisionNumber,MONTH(OrderDate)OrderDateM,YEAR(OrderDate)OrderDateY
from sales.SalesOrderHeader
group by MONTH(OrderDate),YEAR(OrderDate))A
ON A.OrderDateM<=B.OrderDateM AND A.OrderDateY=B.OrderDateY
LEFT JOIN
(select SUM(RevisionNumber)RevisionNumber,MONTH(OrderDate)OrderDateM,YEAR(OrderDate)OrderDateY
from sales.SalesOrderHeader
group by MONTH(OrderDate),YEAR(OrderDate))P
ON P.OrderDateM<=B.OrderDateM AND P.OrderDateY=B.OrderDateY-1
GROUP BY B.OrderDateM,B.OrderDateY
ORDER BY B.OrderDateY,B.OrderDateM
将样本数据添加为图像不会对您有所帮助..没有人可以使用它来测试查询。以表格格式添加样本数据作为文本..在SO中有68年时间的68个问题你应该知道这个.. –
如果这些值完全是双倍和三倍,那么这是一个很好的迹象,表明你正在查询返回多个行为你的一些分组。这通常表示连接谓词不正确。我们不可能提供任何细节,因为您没有为我们提供任何细节。这里是一个开始的好地方。 https://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –
第一次连接返回* n *行的* n *个月和第二个月加入到另外的n个月,即一月份正确,二月份为二月份,三月份为三月份等。快速肮脏的解决方案:将LY_YTD'除以月份编号。清理解决方案:重写为两个选择(当前和去年)和外部联接它们。 – dnoeth