SQL Server 手动添加记录记录到 View

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

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

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

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

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

请参阅链接(已回答问题)了解代码布局:

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

enter image description here

最佳答案

对于我的回答,我假设您有一个 View vDays,其中的列与您的屏幕截图相匹配:periodavailabledays年份

要将任何零日期间附加到您的结果中,无论月份可能为零(这将迎合八月和任何其他恰好有零日的月份),您可以像这样扩展您的 View :

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;

我已将其拆分为许多单独的查询,虽然有些可以合并到子查询中,但这样做会使它更容易理解。

关于SQL Server 手动添加记录记录到 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9277628/

相关文章:

sql-server - 如何查找从今天开始的同一工作日值的过去 4 周

html - 如何在 ui 中显示呈现的 html 文本?

sqlite - sqlite View 的性能损失

drupal创建内容 "add more"字段

android - Android 中的自动对话框关闭

mysql - SQL 仅选择列上具有最大值的行

sql - 实现标签的方法 - 各有利弊

sql - 如何在sql server中创建和连接多个派生表

c# - 将本地数据库从一台计算机复制到另一台计算机

sql-server - 开源或低成本 "log shipping"程序