oracle case语句中的多个条件
我很难达到我的要求。我有一个名为accounts\u invoice and data的表,如下所述 数据库表oracle case语句中的多个条件,oracle,Oracle,我很难达到我的要求。我有一个名为accounts\u invoice and data的表,如下所述 数据库表 AC_NO VARCHAR2(20 BYTE) INV_NO VARCHAR2(20 BYTE) CC VARCHAR2(20 BYTE) FT VARCHAR2(20 BYTE) AC_NO INV_NO CC FT ------------------
AC_NO VARCHAR2(20 BYTE)
INV_NO VARCHAR2(20 BYTE)
CC VARCHAR2(20 BYTE)
FT VARCHAR2(20 BYTE)
AC_NO INV_NO CC FT
-----------------------------
1 A PTN INVOICE
1 A PTN BDE
2 B ABC INVOICE
2 B PTN INVOICE
2 B PTN BDE
我已经编写了如下代码,但我的输出似乎不符合我的要求
SELECT
ac_no,
CASE WHEN FT like '%INVOICE%' THEN 'AVAILABLE' else 'NOTAVAILABLE'
END AS INVOICE,
CASE WHEN FT like '%BDE%' THEN 'AVAILABLE' else 'NOTAVAILABLE' END AS BDE
FROM Account_info
where CC='PTN';
输出
1 A Available Notavailable
1 A Notavailable Available
2 B Available Notavailable
2 B Notavailable Available
我期望输出如下所示:
但产出应该是合理的
AC_NO INVOICE BDE
----------------------------------
1 AVAILABLE AVAILABLE
2 AVAILABLE AVAILABLE
请帮助我,如何实现上述输出。稍微修改一下pivot查询应该可以:
SELECT
AC_NO,
CASE WHEN COUNT(CASE WHEN FT = 'INVOICE' THEN 1 END) > 0
THEN 'AVAILABLE' ELSE 'NOTAVAILABLE' END AS INVOICE,
CASE WHEN COUNT(CASE WHEN FT = 'BDE' THEN 1 END) > 0
THEN 'AVAILABLE' ELSE 'NOTAVAILABLE' END AS BDE
FROM yourTable
GROUP BY AC_NO
在本例中,我们将计数包装在第二个
case
表达式中,以检查是否存在发票和bde。这里是另一种方法,不确定哪种方法性能更好。另外,FT='INVOICE'肯定会更好,但我不确定您的数据是否真的需要像“%INVOICE%”这样的FT。我只是把它放在下面
SELECT
a1.AC_NO,
NVL((select 'AVAILABLE' from ACCOUNT_INFO a
where a.AC_NO=a1.AC_NO and a.FT like '%INVOICE%'
and rownum=1
),'NOTAVAILABLE') as INVOICE,
NVL((select 'BDE' from ACCOUNT_INFO a
where a.AC_NO=a1.AC_NO and a.FT like '%BDE%'
and rownum=1
),'NOTAVAILABLE') as BDE
FROM (
SELECT DISTINCT AC_NO
FROM ACCOUNT_INFO
WHERE CC='PTN'
) a1
显然,这是考官最喜欢的问题:如果使用
groupby