我在数据库中有下表(屏幕截图),其中记录了在APP_NAME特定日期打开的缺陷的批准状态为T1_APPROVAL。
我想在特定日期每个APP_NAME只显示一行。 例如。如果所有T1_APPROVAL =' Y'其中APP_NAME =' LS-OMS'它应显示已批准,否则待处理。
这是我到目前为止大致准备的,但没有给出预期的结果。
SELECT DISTINCT
CASE WHEN t1_approval <> 'Y' THEN 'Pending' ELSE 'Approved' END
AS status
FROM DAV_CR_DEFECT_DPLOYMENT_STATUS
WHERE TRUNC (deploy_date) = TO_DATE ('24-JAN-2018', 'dd-mon-yyyy')
GROUP BY (t1_approval);
如果你看截图,IOMIP有一个条目为N,1个条目为Y - 它应显示为PENDING;对于LS-OMS,所有T1_APPROVAL都是Y - 它应该显示为APPROVED。
这是我的最终结果,应该显示如下:
APP_NAME | T1_APPROVAL
======================
IOMIP | PENDING
LS-OMS | APPROVED
答案 0 :(得分:1)
你想要一个group by
和一些条件逻辑:
SELECT TRUNC(deploy_date), app_name,
(CASE WHEN MIN(TL_APPROVAL) = 'Y' THEN 'Approved' ELSE 'Pending' END) as status
FROM DAV_CR_DEFECT_DPLOYMENT_STATUS
GROUP BY TRUNC(deploy_date), app_name;
答案 1 :(得分:1)
对内部查询中的每个T1_APPROVAL
计算N
= APP_NAME
的计数,如果为0 =&gt; PENDING
其他APPROVED
。
SELECT A.DEPLOY_DATE, A.APP_NAME,
CASE WHEN A.PENDING_ENTRIES = 0 THEN 'APPROVED' ELSE 'PENDING' END AS T1_APPROVAL
FROM
(SELECT TRUNC(DEPLOY_DATE) AS DEPLOY_DATE, APP_NAME,
SUM(CASE WHEN T1_APPROVAL = 'N' THEN 1 ELSE 0 END) AS PENDING_ENTRIES
FROM DAV_CR_DEFECT_DPLOYMENT_STATUS
GROUP BY TRUNC(DEPLOY_DATE), APP_NAME) A;
答案 2 :(得分:1)
SELECT APP_NAME,
CASE
WHEN AVG(ASCII(T1_APPROVAL)) = ASCII('Y')
THEN 'APPROVED'
ELSE 'PENDING'
END AS T1_APPROVAL
FROM DAV_CR_DEFECT_DPLOYMENT_STATUS
WHERE TRUNC(deploy_date) = TO_DATE('24-JAN-2018', 'dd-mon-yyyy')
GROUP BY APP_NAME
试试......这是漫长的一天,我可能会忘记一些愚蠢的事情。
*编辑:忘记将日期选择条款放入。
答案 3 :(得分:0)
你也可以使用MIN,
SELECT APP_NAME,
DECODE(MIN(T1_APPROVAL), 'Y', 'APPROVED', 'PENDING')
FROM DAV_CR_DEFECT_DPLOYMENT_STATUS
WHERE TRUNC(deploy_date) = TO_DATE('24-JAN-2018', 'dd-mon-yyyy')
GROUP BY APP_NAME