sql - SQL - 每列显示特定范围的结果?
问题描述
我正在尝试在 SAP 内部创建一个销售矩阵。
我要运行的 SQL 报告非常基础。它涉及以下内容:
SELECT
T1.ItemCode, SUM(T1.Quantity)
FROM
OINV T0
INNER JOIN
INV1 T1 ON T0.DocEntry = T1.DocEntry
WHERE
ItemCode IS NOT NULL
AND CardCode = 'C001500'
GROUP BY
T1.ItemCode
ORDER BY
T1.ItemCode
我希望将该SUM(t1.quantity)
领域分解为数周,但无法完全弄清楚如何将其分解。
我想要Current Week
一个daterange
between Getdate()
and Getdate()+7
,然后Week1
是Getdate()+8 To
GetDate()+14` 等等...这将持续 12 周。
谢谢你的帮助!
安迪
解决方案
我现在已经编写了这段代码,但是 SUM T1.Quantity 不是总计。我看到 AHV16 在第 5 周销售 1 件商品,然后是另一个实例 AHV16 在第 2 周销售一件商品。AHV 16 在第 1 - 12 周显示 NULL,并且在 12 周内显示 1(应该是第 2 周 + 第 5 周。
SELECT T1.ItemCode
, '12 Week Total' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-84,Getdate()) AND T0.DocDate<=DateAdd(D,0,Getdate())))
, 'Current Week' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-7,Getdate()) AND T0.DocDate<=DateAdd(D,0,Getdate())))
, 'Week 2' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-14,Getdate()) AND T0.DocDate<=DateAdd(D,-8,Getdate())))
, 'Week 3' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-21,Getdate()) AND T0.DocDate<=DateAdd(D,-15,Getdate())))
, 'Week 4' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-28,Getdate()) AND T0.DocDate<=DateAdd(D,-22,Getdate())))
, 'Week 5' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-35,Getdate()) AND T0.DocDate<=DateAdd(D,-29,Getdate())))
, 'Week 6' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-42,Getdate()) AND T0.DocDate<=DateAdd(D,-36,Getdate())))
, 'Week 7' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-49,Getdate()) AND T0.DocDate<=DateAdd(D,-43,Getdate())))
, 'Week 8' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-56,Getdate()) AND T0.DocDate<=DateAdd(D,-50,Getdate())))
, 'Week 9' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-63,Getdate()) AND T0.DocDate<=DateAdd(D,-57,Getdate())))
, 'Week 10' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-70,Getdate()) AND T0.DocDate<=DateAdd(D,-64,Getdate())))
, 'Week 11' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-77,Getdate()) AND T0.DocDate<=DateAdd(D,-71,Getdate())))
, 'Week 12' = (SELECT sum(T1.Quantity) WHERE (T0.DocDate>=DateAdd(Day,-84,Getdate()) AND T0.DocDate<=DateAdd(D,-78,Getdate())))
FROM OINV T0 INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry
WHERE ItemCode IS NOT NULL and CardCode = 'C001500'
GROUP BY T1.ItemCode, T0.Docdate
Order By T1.ItemCode
推荐阅读
- python - 如果我使用 pip3 安装 AWS CLI,如何修复“dyld:库未加载”?
- java - 以编程方式清除 IBM MQ 队列
- android - 删除 Android 选项卡工具栏菜单顶部间距/填充
- r - 为什么 'nrow()' 函数似乎在 'summarise()' 函数中不起作用?
- javascript - 单击编辑按钮时如何使用已选择的数据自动填充文本框
- node.js - API 网关返回 401 并且不调用自定义授权方
- javascript - Jquery排序表td没有正确排序货币
- r - rvest:for loop/map 使用 html_node 和 html_table 拉多个表
- java - 在 GUI 中创建没有“时间漂移”的重复操作
- java - 处理不同的 JSON 请求 Jackson