【问题标题】:SQL Server adding a record record manually to a viewSQL Server 手动将记录记录添加到视图
【发布时间】:2012-03-05 20:45:11
【问题描述】:

我有一个视图,其中包含下图中的数据。 该视图向我显示当前财政年度每个月有多少工作日可以带走任何学校/银行假期。

由于 8 月份的可用天数为零,因此已将本月排除在视图之外。

由于 8 月份可用的总天数始终为零,因此将 SQL 硬编码为 8 月份始终为 0 以及与 April-8 相同的 4-8 月记录似乎是可以接受的七月。

添加这 2 条记录的最佳方法是什么,以及应该将其放置在代码中的什么位置,请参见代码布局示例:

查看代码布局的链接(已回答的问题):

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

【问题讨论】:

    标签: sql sql-server view reporting-services ssrs-2008


    【解决方案1】:

    对于我的回答,我假设您有一个视图 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;
    

    我已经把它分成了很多单独的查询,虽然有些可以合并到子查询中,但是这样做会让它更容易理解。

    【讨论】:

      【解决方案2】:

      这会给你想要的结果集吗?

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多