sql - 如何修改以下代码以忽略带 0 的行并每周显示输出

标签 sql sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2

我的以下查询给出了图 1 中所示的输出。我想对其进行更改,以便它给出图 2 中的输出。我想显示每周(即使该值为 0) 这是查询。请帮忙。

SELECT @MaxDate = @MaxDate
    ,@MinDate = dateadd(week, (@LastXWeeks + 1), @MaxDate);

WITH AllDates
AS (
    SELECT @MinDate AS xDate

    UNION ALL

    SELECT Dateadd(day, 1, xDate)
    FROM AllDates AS ad
    WHERE ad.xDate < @MaxDate
    )
SELECT 'playing' AS activity
    ,ad.xDate
    ,Isnull(t.TimePerDay, 0) AS TimePerDay
FROM AllDates AS ad WITH (NOLOCK)
LEFT JOIN @test AS t ON ad.xDate = t.DATE

Figure 1

Figure 2

最佳答案

您希望每周获得结果,因此按周分组:

WITH AllDates
AS (
    SELECT @MinDate AS xDate

    UNION ALL

    SELECT Dateadd(day, 1, xDate)
    FROM AllDates AS ad
    WHERE ad.xDate < @MaxDate
    )
SELECT 
  'playing' AS activity
  ,min(ad.xDate) -- or max or the week number, whichever you like best
  ,Isnull(sum(t.TimePerDay), 0) AS TimePerDay
FROM AllDates AS ad WITH (NOLOCK)
LEFT JOIN @test AS t ON ad.xDate = t.DATE
GROUP BY datepart(wk, ad.xDate);

关于sql - 如何修改以下代码以忽略带 0 的行并每周显示输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31875386/

相关文章:

c# - 静默安装 SQL Server 2008 服务包时抑制 UAC 帐户设置窗口

mysql - 如何在 Sql-server 中对按日期分组的时间求和

sql - 为什么此SQL查询这么慢?

sql - 如何创建一个标志,根据值是否占计数的大部分来获取列值的值?

sql-server - 删除时间序列中的重复项

sql - 如何检查 vb .net 项目中的 sql server 中是否存在数据库和表?

php - Mysql INSERT 在 PHP 中不起作用

java - 所有值均未插入数据库

c# - EF Core 生成反向查询

sql - 在 SQL Server 2008 GUI 中添加唯一约束?