[英]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.