以下是我的观点,应该按照“每周假期”排序 “年度假期”为第二个,“特殊节日”为第三个,并根据日期的顺序按照“日期”栏目进行订购,这是日期如何订购jan,feb,mar等。
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
P.S。: - 视图中我的列日期的数据类型是varchar,因为它在星期日并根据字符串进行排序。 谢谢!
答案 0 :(得分: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;
或者,如果您想坚持原始视图,那么唯一的方法是将实际日期列添加到 SELECT列表并在{中使用它{1}}条款。
ORDER BY
请注意,个人SQL级别的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;
子句始终>> <{1}}中提到的排序优先级。