[英]Query to get multiple results from single query or return null
我有一个假期表,其中包含以下字段
COLUMN_NAME DATA_TYPE
-------------------------------
HOLIDAY_ID NUMBER(10,0)
HOLIDAY_NAME VARCHAR2(150 BYTE)
HOLIDAY_DATE TIMESTAMP(6)
DAY_OF_WEEK VARCHAR2(20 BYTE)
HOLIDAY_TYPE_ID NUMBER
样本数据是
HOLIDAY_ID HOLIDAY_NAME HOLIDAY_DATE DAY_OF_WEEK HOLIDAY_TYPE_ID
-------------------------------------------------------------------------------
305 Republic Day 26-01-17 12:00:00.000000000 AM Thursday 1
306 Maha Shivratri 24-02-17 12:00:00.000000000 AM Friday 1
我使用以下查询获取特定月份/年份的holiday_date: (QUERY)
select nvl((select to_char(holiday_date,'DD/MM/YY') holiday
from admin_holiday where to_char(holiday_date,'DD-MON-YYYY') like '%-JUN-2016%'
and holiday_type_id=1 and to_char(holiday_date,'Day') not like 'Sun%'
and to_char(holiday_date,'Day') not like 'Sat%'),'0') holiday from dual
如果结果为空(即,月/年= JUN / 2016),但工作正常,但当月份包含多个假期(例如,月/年= OCT /)时,出现“单行子查询返回多个行”错误2016)
如何编写查询,以便如果查询返回多行然后显示那些结果,否则显示NULL结果为'0'?
[ 注意 :假期按照印度日历]
您应该考虑将查询更改为此:
SELECT NVL(TO_CHAR(holiday_date,'DD/MM/YY'), '0') holiday
FROM admin_holiday
WHERE TO_CHAR(holiday_date,'MON-YYYY') = 'JUN-2016'
--WHERE TO_CHAR(holiday_date,'yyyymm') = '201606'
AND holiday_type_id = 1
AND TO_CHAR(holiday_date,'Day') NOT IN ('Sun', 'Sat');
您需要将nvl函数应用于列和结果,如下所示:
select nvl(to_char(holiday_date,'DD/MM/YY'),'0') holiday
from (select 1 as dummy from dual) d left join admin_holiday
on to_char(holiday_date,'DD-MON-YYYY') like '%-JUN-2016%'
and holiday_type_id=1 and to_char(holiday_date,'Day') not like 'Sun%'
and to_char(holiday_date,'Day') not like 'Sat%'
附带说明:了解如何编写可查询的查询
SELECT NVL(TO_CHAR(holiday_date,'DD/MM/YY'), '0') holiday
FROM admin_holiday
WHERE TO_CHAR(holiday_date,'MON-YYYY') = 'JUN-2016'
--WHERE TO_CHAR(holiday_date,'yyyymm') = '201606'
AND holiday_type_id = 1
AND TO_CHAR(holiday_date,'Day') NOT IN ('Sun', 'Sat')
union all
select '0' from dual where not exists(SELECT NVL(TO_CHAR(holiday_date,'DD/MM/YY'), '0') holiday
FROM admin_holiday
WHERE TO_CHAR(holiday_date,'MON-YYYY') = 'JUN-2016'
--WHERE TO_CHAR(holiday_date,'yyyymm') = '201606'
AND holiday_type_id = 1
AND TO_CHAR(holiday_date,'Day') NOT IN ('Sun', 'Sat'))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.