0

我一直在尝试解决 SQL 上的以下情况,以将其用于水晶报表,以便我可以使用数据创建动态交叉表。基本上我有以下一组数据

表格1

这显示了 1 个订单正在经历不同的阶段,每个阶段都有一个日期和状态(即阶段 1-6 是开放的,而阶段 7-9 是关闭的)。为了测试,我只包含了 1 个文档,但这将在数千个文档中完成。最终结果应该是这个表:

交叉表

现在使用我的常规查询在第 3 阶段之前一切正常,因为该文档在 3 月和 6 月之间没有数据,但我需要在 4 月和 5 月显示它,因为它在技术上仍处于开放阶段(同样适用于 6 月和 11 月之间以及 11 月之后它必须被删除,因为它已关闭)。

我得到的最接近的是使用单独的日历维度并使用交叉连接来复制数据,但是当我尝试再次将其转换为行时,我遇到了无法过滤掉每个阶段不必要的行的问题(我的解决方案显示每个阶段每个月的文档,因此 12*9 并且我无法标记不需要的行以删除)。

任何帮助,将不胜感激!

编辑:下面的查询(HANA SQL)

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 是它最后关闭的日期。

在上述数据中,此查询将正确显示 Order 1 为打开状态,直到它在 11 月正确关闭,但是如果我尝试切换回行以便将每个阶段放在单独的行中,它将为每个阶段显示 12 行,不管和我还没有弄清楚如何标记和删除不必要的。

4

0 回答 0