SQL-七天周报(周日至周六)

SQL-七天周报(周日至周六),sql,sql-server,tsql,ssis,srs,Sql,Sql Server,Tsql,Ssis,Srs,我创建了以下查询,从星期六和星期日开始,每七天重复一次。此报告将每七天运行一次。但是,我在SFTP文件夹(入站)报告中收到文件时遇到的问题应该有一个缺少Null=0的条目。主要目标是使这成为一个自动化的过程,每周日到周日每七天执行一次 例如: SELECT SubmitterID,SubmitterName,convert(varchar(15), DateReceived, 101) DateReceived,sum(ClaimCount) as TotalCount FROM Fallout

我创建了以下查询,从星期六和星期日开始,每七天重复一次。此报告将每七天运行一次。但是,我在SFTP文件夹(入站)报告中收到文件时遇到的问题应该有一个缺少Null=0的条目。主要目标是使这成为一个自动化的过程,每周日到周日每七天执行一次 例如:

SELECT SubmitterID,SubmitterName,convert(varchar(15), DateReceived, 101) DateReceived,sum(ClaimCount) as TotalCount
FROM FalloutClaimReport
WHERE DateReceived BETWEEN '2019-06-01' AND '2019-06-07'
--ORDER BY COUNT(submitterID) DESC;
GROUP BY submitterid, SubmitterName, convert(varchar(15), DateReceived, 101)

DECLARE @StartDate AS DATETIME
DECLARE @EndDate AS DATETIME
DECLARE @CurrentDate AS DATETIME

SET @StartDate = '2019-06-01' --AND '2019-06-10'
SET @StartDate = '2019-06-07'
SET @EndDate = GETDATE()
SET @CurrentDate = @StartDate
奥黛丽

我建议两种可能的解决办法。假设你说的SRS是指SSR

1) 我会将您的SSIS作业设置为每7天通过SQL代理运行一次。它将调用一个存储过程(SP),然后运行并写入一个表中。。。调用该SP时,它将运行:

选择
提交人,
提交人姓名,
转换(varchar(15),DateReceived,101)DateReceived,
合计(ClaimCount)为TotalCount
来自法洛特索赔报告
其中,在dateadd(d,-7,cast(getdate()as date))和dateadd(d,-1,cast(getdate()as date))之间进行转换(DateReceived as date)
分组
提交人,
提交人姓名,
转换(varchar(15),DateReceived,101)

2) 如果您决定采用SSRS路线,则应该创建一个报告订阅,该订阅将自动发送给您需要的用户,这些用户调用上面的存储过程,并将您需要的内容发送给任何需要它的人。(假设上面的代码正在选择您需要的内容,那么它应该足够了)

我有点不确定您在寻找什么,但我认为一般的方法是您正在尝试获取一周的数据

日期计算 让我们从一些查询开始(这些查询假定在美国安装,因为默认日期是星期一)

SELECT
    DATEADD(WEEK, -1, CAST(DATEADD(WEEK, DATEDIFF(WEEK, 0, CAST(GETDATE() AS date)), -1) AS date)) AS TheLastSundayOfTheFullWeek
,   DATEADD(WEEK, -1, CAST(DATEADD(WEEK, DATEDIFF(WEEK, 0, CAST(GETDATE() AS date)), +5) AS date)) AS TheLastSaturdayOfTheFullWeek
,   CAST(DATEADD(WEEK, DATEDIFF(WEEK, 0, CAST(GETDATE() AS date)), -1) AS date) AS SundayOfTheCurrentWeek
,   CAST(DATEADD(WEEK, DATEDIFF(WEEK, 0, CAST(GETDATE() AS date)), +5) AS date) AS SaturdayOfTheCurrentWeek;
这些查询生成以下日期

TheLastSundayOfTheFullWeek TheLastSaturdayOfTheFullWeek SundayOfTheCurrentWeek SaturdayOfTheCurrentWeek
2019-06-30                 2019-07-06                   2019-07-07             2019-07-13

最后一整周将运行6/30至7/06。当前一周将定义为7/7至7/13

根据需要的周定义,选择适当的一对列

处理未知数 在这种情况下,我构建了一个虚拟表,其中包含我的报表应该具有的所有预期日期(或元素)。然后,我使用该虚拟表驱动到实际数据表的连接。由于我们不知道是否会找到给定日期的任何行,因此我使用左联接连接这些表

SELECT
    FCR.SubmitterID
,   FCR.SubmitterName
,   CONVERT(varchar(15), ED.DateReceived, 101) AS DateReceived
,   SUM(FCR.ClaimCount) AS TotalCount
FROM
    (
        -- This logic builds out a list of all the dates that must exist on the report
        -- I used the logic for TheLastSundayOfTheFullWeek
        SELECT
            DATEADD(DAY, D.DayOffset, DATEADD(WEEK, -1, CAST(DATEADD(WEEK, DATEDIFF(WEEK, 0, CAST(GETDATE() AS date)), -1) AS date))) AS DateReceived
        FROM
        (
            -- Generate a series of 7 numbers from 0 t 6
            SELECT TOP 7
                -1 + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn
            FROM
                sys.all_columns AS AC 
        ) D(DayOffset)
    ) AS ED
    LEFT OUTER JOIN
        dbo.FalloutClaimReport AS FCR
        ON FCR.DateReceived = ED.DateReceived
GROUP BY
    CONVERT(varchar(15), ED.DateReceived, 101)
,   FCR.SubmitterID
,   FCR.SubmitterName;
这将生成一个结果集,如

我们没有30日或5日的数据,但查询中仍有记录。如果需要其中的默认值,请使用ISNULL/COALESCE调用包装该列


为了提供一个测试沙盒

老实说,我不知道您在这里要求什么。示例数据和期望的结果可能会有所帮助。请看一看,我是SQL的初学者,所以请原谅!Billinkc您正是我现在试图完成的目标的正确方向。当我尝试捕获数据库的信息时,su的值为空b提交者id、提交名称和总计数