【发布时间】:2014-10-02 08:07:24
【问题描述】:
我有一个查询,它会提取 36 个月的滚动单位销售历史记录。它按原样工作,但我想知道是否有办法让它变得不那么冗长和繁琐。
查询有两部分 - 标题和数据。
这是我的标题:
SELECT
DATEADD(m, -36, GETDATE()-day(GETDATE()-1)) AS "MM36"
, DATEADD(m, -35, GETDATE()-day(GETDATE()-1)) AS "MM35"
, DATEADD(m, -34, GETDATE()-day(GETDATE()-1)) AS "MM34"
截至今天,这是 2011 年 9 月 - 11 月。它继续...
, DATEADD(m, -03, GETDATE()-day(GETDATE()-1)) AS "MM03"
, DATEADD(m, -02, GETDATE()-day(GETDATE()-1)) AS "MM02"
, DATEADD(m, -01, GETDATE()-day(GETDATE()-1)) AS "MM01"
2014 年 6 月 - 8 月。36 行代码。
拉取销量数据的语句如下:
, SUM (CASE WHEN "SalesTable"."SalesDate" BETWEEN DATEADD(m, -36, GETDATE()-day(GETDATE()-1)) AND DATEADD(m, -35, GETDATE()-day(GETDATE()-1))-1 THEN "SalesTable"."SalesQty" - "SalesTable"."ReturnsQty" 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"."SalesQty" - "SalesTable"."ReturnsQty" ELSE NULL END) AS "NetQty35"
, SUM (CASE WHEN "SalesTable"."SalesDate" BETWEEN DATEADD(m, -34, GETDATE()-day(GETDATE()-1)) AND DATEADD(m, -33, GETDATE()-day(GETDATE()-1))-1 THEN "SalesTable"."SalesQty" - "SalesTable"."ReturnsQty" ELSE NULL END) AS "NetQty34"
截至今天,这是 2011 年 9 月 - 11 月。它继续...
, SUM (CASE WHEN "SalesTable"."SalesDate" BETWEEN DATEADD(m, -03, GETDATE()-day(GETDATE()-1)) AND DATEADD(m, -02, GETDATE()-day(GETDATE()-1))-1 THEN "SalesTable"."SalesQty" - "SalesTable"."ReturnsQty" ELSE NULL END) AS "NetQty03"
, SUM (CASE WHEN "SalesTable"."SalesDate" BETWEEN DATEADD(m, -02, GETDATE()-day(GETDATE()-1)) AND DATEADD(m, -01, GETDATE()-day(GETDATE()-1))-1 THEN "SalesTable"."SalesQty" - "SalesTable"."ReturnsQty" 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"."SalesQty" - "SalesTable"."ReturnsQty" ELSE NULL END) AS "NetQty01"
2014 年 6 月 - 8 月。
在完成这份报告之前,我还有很多东西要补充,所以我希望尽可能保持整洁。
谢谢,
编辑
下面的示例表明,通过上面的代码,我能够得到我想要的(没有代表发布图像,所以我必须做一个链接)。它还表明,使用数据透视表我缺少我的项目编号和滚动月份。我如何添加这两个东西?
我尝试如下删除“ItemTable”.“ItemNum”字段,但它没有显示在我的 Crystal Report 中。在我尝试将它放在其他任何地方时,都会出现“无法绑定”错误。
select
[0] MM00
, [1] MM01
, [2] MM02
, ...
from (
select
"ItemTable"."ItemNum",DateDiff(m, "SalesTable"."SalesDate", GetDate()) months_ago
, "SalesTable"."SalesQty" - "SalesTable"."ReturnsQty" NetQty
from your_table
) as source
pivot
(
sum(NetQty) For months_ago in ([0], [1], [2], [3], ...)
) as PivotTable
再次感谢。
【问题讨论】:
-
进行一个月的查询并将其包装在从 1 到 36 递增的 WHILE 循环中。
标签: sql sql-server crystal-reports crystal-reports-xi