2012-02-14 47 views
3

我有一個視圖,其中包含下圖中顯示的數據。 該視圖顯示當前財政年度每個學校/銀行假期中每個月有多少個工作日可用。SQL Server手動添加記錄記錄到視圖

由於八月份的月份有零天,因此本月已從視圖中排除。

由於8月份的可用天數總是零,因此硬編碼SQL在8月始終爲0,而​​且4月至8月的記錄與4月相同-七月。

什麼是添加這兩個記錄的最佳方式,並在有關的代碼應該把它放在看到示例代碼佈局:

見鏈接(回答問題)對代碼的佈局:

SQL populate total working days per month minus bank holidays for current financial year

enter image description here

回答

0

我的回答,我會假設你有帶有與您的屏幕截圖匹配的列的視圖vDaysperiodavailabledays,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; 

我已經把它分解成許多單獨的查詢,雖然有些可以合併到子查詢中,但是像這樣做會讓它理解得更清晰。

0

這會給你你想要的結果集嗎?

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