2015-11-27 58 views
2

繼的基礎上,我認爲,應該通過「每週的節日」獲得訂購的是第二首 「年度節日」和「特殊的節日」爲第三和進一步得到根據日期的順序德列「日期」排序的,這是一個日期如何被下令一月,二月,三月,等如何訂購我的專欄「日期」一個日期

Create or Replace view VW_TBL_HOILDAY_APLICATION as  
     SELECT DISTINCT 
     CASE A.DESCRIPTION 
      WHEN 'Weekly holiday' 
      THEN TO_CHAR(A.Holiday_date,'FMDAY') 
      WHEN 'Annual holiday' 
      THEN TO_CHAR(A.holiday_date,'dd-MON') 
      WHEN 'Special_Date_Holiday' 
      THEN TO_CHAR(A.holiday_date,'dd-MON-yy') 
     END            AS Dates, 
     A.DESCRIPTION 
     FROM tbl_holiday_master A 
     where A.description in('Weekly holiday','Annual holiday','Special_Date_Holiday') 
     order by CASE A.DESCRIPTION 
        WHEN 'Weekly holiday' 
        THEN '1' 
        WHEN 'Annual holiday' 
        THEN '2' 
        WHEN 'Special_Date_Holiday' 
        THEN '3' 
        END ASC, Dates ASC; 

,但我的輸出是這樣的::

DATES DESCRIPTION 
--------------------------  
    SUNDAY Weekly holiday 
    02-OCT Annual holiday 
    15-AUG Annual holiday 
    26-JAN Annual holiday 
    11-NOV-15 Special_Date_Holiday 
    25-DEC-15 Special_Date_Holiday 
    25-JAN-15 Special_Date_Holiday 

PS:-datatype我的專欄的日期我n視圖由於星期日在varchar中並且根據字符串進行排序。 謝謝!

+0

使用'爲了通過A.holiday_date'將由_real_日期值,而不是字符串進行排序。 –

+0

@a_horse_with_no_name它說它不是一個選定的表達式。 –

回答

2

的問題是,你是轉換DATE

CASE A.DESCRIPTION 
     WHEN 'Weekly holiday' 
     THEN TO_CHAR(A.Holiday_date,'FMDAY') 
     WHEN 'Annual holiday' 
     THEN TO_CHAR(A.holiday_date,'dd-MON') 
     WHEN 'Special_Date_Holiday' 
     THEN TO_CHAR(A.holiday_date,'dd-MON-yy') 
END 

不要做,在視圖,但做到這一點只要你想顯示查詢視圖時的日期。

創建視圖:

CREATE OR REPLACE VIEW VW_TBL_HOILDAY_APLICATION 
AS 
    SELECT DISTINCT A.holiday_date AS holiday_date, 
    A.DESCRIPTION 
    FROM tbl_holiday_master A 
    WHERE A.description IN('Weekly holiday', 
         'Annual holiday', 
         'Special_Date_Holiday'); 

然後格式排序日期,而查詢視圖

SELECT 
    CASE DESCRIPTION 
    WHEN 'Weekly holiday' 
    THEN TO_CHAR(holiday_date,'FMDAY') 
    WHEN 'Annual holiday' 
    THEN TO_CHAR(holiday_date,'dd-MON') 
    WHEN 'Special_Date_Holiday' 
    THEN TO_CHAR(holiday_date,'dd-MON-yy') 
    END AS Dates, 
FROM VW_TBL_HOILDAY_APLICATION 
ORDER BY holiday_date; 

或者,如果你想堅持您的原始視圖,那麼唯一的辦法是添加實際日期列選擇列表並在ORDER BY子句中使用它。

CREATE OR REPLACE VIEW VW_TBL_HOILDAY_APLICATION 
AS 
    SELECT DISTINCT 
    CASE A.DESCRIPTION 
     WHEN 'Weekly holiday' 
     THEN TO_CHAR(A.Holiday_date,'FMDAY') 
     WHEN 'Annual holiday' 
     THEN TO_CHAR(A.holiday_date,'dd-MON') 
     WHEN 'Special_Date_Holiday' 
     THEN TO_CHAR(A.holiday_date,'dd-MON-yy') 
    END AS Dates, 
    A.DESCRIPTION, 
    A.holiday_date holiday_date 
    FROM tbl_holiday_master A 
    WHERE A.description IN('Weekly holiday','Annual holiday','Special_Date_Holiday') 
    ORDER BY 
    CASE A.DESCRIPTION 
     WHEN 'Weekly holiday' 
     THEN '1' 
     WHEN 'Annual holiday' 
     THEN '2' 
     WHEN 'Special_Date_Holiday' 
     THEN '3' 
    END ASC, 
    holiday_date; 

記住,在單個SQL水平ORDER BY條款總是有優先您在CREATE VIEW提到的排序。

+1

感謝拉利特,你的答案是喋喋不休,看起來像離開了,怎麼我不能選擇HOLIDAY_DATE的唯一方法。:) –

+0

@VishalTyagi通常我不喜歡在一個視圖中的排序,我總是把它在SQL水平。無論如何,希望它解決了你的問題。請將其標記爲已回答,也會幫助其他人! –

+0

我確實嘗試了你的方法,但是,在從視圖中選擇的時候,它是通過holiday_date按順序添加的,而不是選擇的表達式。 –