我正在 Cognos Report Studio 中制作报告,但在获取所需的计数时遇到了一些麻烦。我需要做的是计算一个部门的 ID 数量。但我需要在启动和完成之间分配计数。如果一个 ID 出现不止一次,则将其视为已完成。其他的,当然,将被启动。所以我试图计算一个不同 ID 的 ID 出现次数。这是我在 SQl Developer 中所做的查询:
SELECT
COUNT((CASE WHEN COUNT(S.RFP_ID) > 8 THEN MAX(CT.GCT_STATUS_HISTORY_CLOSE_DT) END)) AS "Sales Admin Completed"
,COUNT((CASE WHEN COUNT(S.RFP_ID) = 8 THEN MIN(CT.GCT_STATUS_HISTORY_OPEN_DT) END)) as "Sales Admin Initiated"
FROM
ADM.B_RFP_WC_COVERAGE_DIM S
JOIN ADM.B_GROUP_CHANGE_REQUEST_DIM CR
ON S. RFP_ID = CR.GCR_RFP_ID
JOIN ADM.GROUP_CHANGE_TASK_FACT CT
ON CR.GROUP_CHANGE_REQUEST_KEY = CT.GROUP_CHANGE_REQUEST_KEY
JOIN ADM.B_DEPARTMENT_DIM D
ON D.DEPARTMENT_KEY = CT.DEPARTMENT_RESP_KEY
WHERE CR.GCR_CHANGE_TYPE_ID = '20'
AND S.RFP_LOB_IND = 'WC'
AND S.RFP_AUDIT_IND = 'N'
AND CR.GCR_RECEIVED_DT BETWEEN '01-JAN-13' AND '31-DEC-13'
AND D.DEPARTMENT_DESC = 'Sales'
AND CT.GCT_STATUS_IND = 'C'
GROUP BY S.RFP_ID ;
现在这行得通。但我不确定如何将 taht 翻译成 Cognos。我尝试做一个 CASE taht 看起来像这样(此代码使用基本名称,例如 dept 而不是 D.DEPARTMENT_DESC):
CASE WHEN dept = 'Sales' AND count(ID for {DISTINCT ID}) > 1 THEN count(distinct ID)END)
我正在使用 count(distinct ID) 而不是 count(maximum(close_date))。但无论如何,结果都是一样的。“AND”是我认为它丢失的地方。这显然不是计算出现次数的正确方法。但我希望我很接近。有没有办法用 CASE 做到这一点?还是根本没有?
--EDIT-- 为了让我的问题更清楚,这里有一个例子:
假设我的表中有这些数据
ID
---
1
2
3
4
2
5
5
6
2
我想要的计数输出是:
Initiated Completed
--------- ---------
4 2
这是因为两个不同的 ID(2 和 5)不止一次出现。因此它们被视为已完成。仅发生一次的算作已启动。我可以在 SQl Dev 中执行此操作,但我无法弄清楚如何在 Cognos Report Studio 中执行此操作。我希望这有助于更好地解释我的问题。