SQL Server 手动向视图添加记录

3

我有一个视图,其中包含如下图所示的数据。该视图显示了当前财政年度每个月可用的工作日数量,减去任何学校/银行假期。

由于8月份没有可用天数,因此将该月从视图中排除。

由于8月份可用天数总数始终为零,则硬编码SQL始终在8月份为0,并且4月-8月记录将与4月-7月相同,似乎是可以接受的。

如何添加这两个记录,以及应将其放置在代码中的哪个位置,请参见代码布局示例:

请参见链接(已回答的问题)以获取代码布局:

SQL填充当前财政年度每月减去银行假日的工作日总数

enter image description here

2个回答

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

0
对于我的回答,我假设您有一个视图 vDays,其中包含与您的屏幕截图匹配的列:periodavailabledaysyear
为了将任何零天期附加到您的结果中,无论哪个月份可能为零(这将适用于8月和任何其他可能有零天的月份),您可以像这样扩展您的视图:
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;

我已将此拆分为许多单独的查询,尽管有些可以合并成子查询,但这样做使其更清晰易懂。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接