簡體   English   中英

查詢以從單個查詢獲取多個結果或返回null

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM