2015-11-27 2 views
2

Следующее мое мнение, которое должно быть заказано «еженедельным отпуском» в качестве первого «Ежегодный отпуск» как второй, так и «специальный праздник» в качестве третьего и далее упорядочиваются по Teh колонке «даты» по порядку даты, то есть, как дата командируют январь, февраль, март и т.д.Как мне заказывать свои столбцы «Даты» на основе даты

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 моей колонки даты i n view - varchar из-за воскресенья в нем и сортировки по строке. Спасибо !.

+0

Используйте 'order by A.holiday_date', который будет сортировать по значению даты _real_, а не по строке. –

+0

@a_horse_with_no_name В нем говорится, что это не выбранное выражение. –

ответ

2

Проблема заключается в том, что вы преобразованияДАТА в строку:

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; 

Помните, что положение ORDER BY на индивидуальном уровне SQL всегда имеет приоритет над Распределяющей вы упомянули в CREATE VIEW.

+1

Спасибо, lalit, ваш ответ взломан, и выглядит как единственный подход слева, потому что я не могу выбрать holiday_date. :) –

+0

@VishalTyagi Обычно я не предпочитаю сортировать в представлении, я всегда оставляю его на уровне sql. Во всяком случае, надеюсь, что он решил вашу проблему. Пожалуйста, отметьте это как ответ, помогите другим тоже! –

+0

Я попробовал ваш подход, но по заказу addin от holiday_date, выбирая из представления, он говорит не выбранное выражение. –

Смежные вопросы