我有一个视图,其中包含如下图所示的数据。该视图显示了当前财政年度每个月可用的工作日数量,减去任何学校/银行假期。
由于8月份没有可用天数,因此将该月从视图中排除。
由于8月份可用天数总数始终为零,则硬编码SQL始终在8月份为0,并且4月-8月记录将与4月-7月相同,似乎是可以接受的。
如何添加这两个记录,以及应将其放置在代码中的哪个位置,请参见代码布局示例:
请参见链接(已回答的问题)以获取代码布局:
我有一个视图,其中包含如下图所示的数据。该视图显示了当前财政年度每个月可用的工作日数量,减去任何学校/银行假期。
由于8月份没有可用天数,因此将该月从视图中排除。
由于8月份可用天数总数始终为零,则硬编码SQL始终在8月份为0,并且4月-8月记录将与4月-7月相同,似乎是可以接受的。
如何添加这两个记录,以及应将其放置在代码中的哪个位置,请参见代码布局示例:
请参见链接(已回答的问题)以获取代码布局:
这样做会给您所期望的结果集吗?
SELECT Period, DaysAvailable, Year FROM YOURVIEW
UNION ALL
SELECT DISTINCT 'April-August', DaysAvailable, Year FROM YOURVIEW where Period = 'April-July'
UNION ALL
SELECT DISTINCT 'August', 0, YEAR FROM YOURVIEW
vDays
,其中包含与您的屏幕截图匹配的列:period
、availabledays
、year
。WITH Mths (Mth) AS (
SELECT 'January'
UNION SELECT 'February'
UNION SELECT 'March'
UNION SELECT 'April'
UNION SELECT 'May'
UNION SELECT 'June'
UNION SELECT 'July'
UNION SELECT 'August'
UNION SELECT 'September'
UNION SELECT 'October'
UNION SELECT 'November'
UNION SELECT 'December'
UNION SELECT 'April - January'
UNION SELECT 'April - February'
UNION SELECT 'April - March'
UNION SELECT 'April - May'
UNION SELECT 'April - June'
UNION SELECT 'April - July'
UNION SELECT 'April - August'
UNION SELECT 'April - September'
UNION SELECT 'April - October'
UNION SELECT 'April - November'
UNION SELECT 'April - December'
), Years (Year) AS (
SELECT DISTINCT year
FROM vDays
), ZeroPeriods (Mth, Years) AS (
SELECT Mth, Year
FROM Mths, Years
), JoinedData (Mth, AvailableDays, Year) AS (
SELECT Mth, 0, Years
FROM ZeroPeriods
UNION ALL
SELECT period, availabledays, year
FROM vDays
), GroupedData (Mth, AvailableDays, Year) AS (
SELECT Mth, SUM(AvailableDays), Year
FROM JoinedData
GROUP BY Mth, Year
)
SELECT *
FROM GroupedData
ORDER BY Year, CASE UPPER(LEFT(Mth, 3))
WHEN 'JAN' THEN 1 WHEN 'FEB' THEN 2 WHEN 'MAR' THEN 3
WHEN 'APR' THEN 4 WHEN 'MAY' THEN 5 WHEN 'JUN' THEN 6
WHEN 'JUL' THEN 7 WHEN 'AUG' THEN 8 WHEN 'SEP' THEN 9
WHEN 'OCT' THEN 10 WHEN 'NOV' THEN 11 ELSE 12 END;
我已将此拆分为许多单独的查询,尽管有些可以合并成子查询,但这样做使其更清晰易懂。