问题描述
我一直试图在sql上解决以下情况,以将其用于水晶报表,以便我可以使用数据创建动态交叉表。基本上我有以下数据集
这显示1个订单经历不同的阶段,每个阶段都有一个日期和状态(即1-6阶段处于打开状态,而7-9阶段处于关闭状态)。为了进行测试,我只包括了1个文档,但这将在成千上万的文档中完成。最终结果应该是此表:
现在,使用常规查询,在第3阶段之前一切都会好起来,因为该文档在3月至6月之间没有数据,但是我需要在4月和5月显示它,因为从技术上讲,它仍处于开放阶段(6月至11月之间同样适用并且在11月之后必须将其删除,因为它已关闭。)
我得到的最接近的结果是使用单独的日历维度并使用交叉联接来复制数据,但是当我尝试再次将其转换为行时,我遇到了无法为每个过滤掉不必要的行的问题阶段(我的解决方案显示了每个阶段每个月的文档,因此12 * 9,因此我无法标记要删除的不需要的行)。
任何帮助将不胜感激!
SELECT
T0."YearMonth",T1."OrderNum",T1."Phase 01",T1."Phase 02",T1."Phase 03",T1."Phase 04",T1."Phase 05",T1."Phase 06",T1."Phase 07",T1."Phase 08",T1."Phase 09",CASE WHEN T0."YearMonth" between T1."OpenDate" and ifnull(T1."CloseDate",'20990101') THEN 'O' ELSE 'C' END AS "Status",T1."Value"
FROM "YearMonthDIM" T0
CROSS JOIN (SELECT * FROM "Orders" WHERE "OrderNum" = 1) T1
WHERE "YEAR" = 2020
ORDER BY T0."YearMonth"
OpenDate基本上是该订单具有日期的第一阶段,而close是其关闭的最后日期。
在上面的数据上,此查询将正确显示订单1直到11月正确关闭为止,但是,如果我尝试切换回行以将每个阶段放在单独的行中,则它将为每行显示12行阶段,无论如何,我还没有弄清楚如何标记和删除不必要的标记。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)