oracle case语句中的多个条件

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 ------------------

我很难达到我的要求。我有一个名为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
-----------------------------
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