我正在尝试使用命令从头开始创建滚动单位销售历史报告(反过来,它将用于预测销售)。我决定不能通过常规手段建立这个,因为只会有太多的公式。
我已成功拉动单位销售并为该字段创建标题,指定数据是2011年9月(36个月前)。这是我的SQL:
SELECT "SalesTable"."UnitSalesQty" - "SalesTable"."UnitReturnQty" AS "NetQty36"
, DATEADD(m, -36, GETDATE() - day(GETDATE() - 1)) AS "M36"
, "ItemTable"."ItemNum"
FROM "ERP_app"."dbo"."SalesTable" "SalesTable"
INNER JOIN "ERP_app"."dbo"."ItemTable" "ItemTable"
ON "ItemTable"."ItemKey"="SalesTable"."ItemKey"
WHERE "SalesTable"."SalesDate"
BETWEEN DATEADD(m, -36, GETDATE() - day(GETDATE() - 1))
AND DATEADD(m, -35, GETDATE() - day(GETDATE() - 1)) - 1
AND "ItemNum" = '1000'
为了简单起见,我现在只选择一个项目。
我的问题是,当我想添加2011年10月时,我不知道是添加到此命令还是创建新命令。我试过了两个。当我添加到此命令时,我收到错误消息,因为带有日期参数的语法是错误的。当我尝试创建一个新命令,将“36”更改为“35”并将数据添加到报告中时,我的2011年9月总计(使用上述命令正确)结果太高。
我是一个会计/财务人员,所以请原谅我的任何无知。
编辑:
根据请求,here(我没有发布图片的代表)是带有上述代码的屏幕截图。详细信息代表每个销售订单。总和是正确的 - 这个月有315个单位。我想在右侧(10月11日,11月11日,7月14日,8月13日)添加更多列,以及各自的单位销售总额。
编辑2:
我能够从别人的问题中解决问题。这是它的要点:
SELECT DATEADD(m, -36, GETDATE()-day(GETDATE()-1)) AS "MM36"
, DATEADD(m, -35, GETDATE()-day(GETDATE()-1)) AS "MM35"
...
, DATEADD(m, -02, GETDATE()-day(GETDATE()-1)) AS "MM02"
, DATEADD(m, -01, GETDATE()-day(GETDATE()-1)) AS "MM01"
, "timItem"."ItemID"
, SUM (CASE WHEN "SalesTable"."SalesDate" BETWEEN DATEADD(m, -36, GETDATE()-day(GETDATE()-1)) AND DATEADD(m, -35, GETDATE()-day(GETDATE()-1))-1 THEN "SalesTable"."UnitSalesQty" - "SalesTable"."UnitReturnQty" ELSE NULL END) AS "NetQty36"
, SUM (CASE WHEN "SalesTable"."SalesDate" BETWEEN DATEADD(m, -35, GETDATE()-day(GETDATE()-1)) AND DATEADD(m, -34, GETDATE()-day(GETDATE()-1))-1 THEN "SalesTable"."UnitSalesQty" - "SalesTable"."UnitReturnQty" ELSE NULL END) AS "NetQty35"
...
, SUM (CASE WHEN "SalesTable"."SalesDate" BETWEEN DATEADD(m, -02, GETDATE()-day(GETDATE()-1)) AND DATEADD(m, -01, GETDATE()-day(GETDATE()-1))-1 THEN "SalesTable"."UnitSalesQty" - "SalesTable"."UnitReturnQty" ELSE NULL END) AS "NetQty02"
, SUM (CASE WHEN "SalesTable"."SalesDate" BETWEEN DATEADD(m, -01, GETDATE()-day(GETDATE()-1)) AND DATEADD(m, -00, GETDATE()-day(GETDATE()-1))-1 THEN "SalesTable"."UnitSalesQty" - "SalesTable"."UnitReturnQty" ELSE NULL END) AS "NetQty01"
FROM "ERP_app"."dbo"."SalesTable" "SalesTable"
INNER JOIN "ERP_app"."dbo"."ItemTable" "ItemTable"
ON "ItemTable"."ItemKey"="SalesTable"."ItemKey"
WHERE "ItemNum" = '1000'
GROUP BY "ItemNum"
答案 0 :(得分:0)
也许试试这个?那你就不必试着找到这个月的最后一天......
SELECT "SalesTable"."UnitSalesQty" - "SalesTable"."UnitReturnQty" AS "NetQty36"
, DATEADD(m, -36, GETDATE() - day(GETDATE() - 1)) AS "M36"
, "ItemTable"."ItemNum"
FROM "ERP_app"."dbo"."SalesTable" "SalesTable"
INNER JOIN "ERP_app"."dbo"."ItemTable" "ItemTable"
ON "ItemTable"."ItemKey"="SalesTable"."ItemKey"
WHERE MONTH("SalesTable"."SalesDate")
BETWEEN MONTH(DATEADD(m, -36, GETDATE()))
AND MONTH(DATEADD(m, -35, GETDATE()))
AND YEAR("SalesTable"."SalesDate") = YEAR(DATEADD(yy,-2,GETDATE()))
AND "ItemNum" = '1000'