MsSQL   发布时间:2022-05-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了sql – 如何在没有执行任何活动时扩展查询以在单元格中添加0大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下查询,它可以很好地显示每天播放的板球时间.我只需要在没有板球比赛时显示0.目前正在跳过这些日期.有关更多参,请参阅此 link.
;WITH CTE AS (
SELECT email,last_update,activity,starttime,endtime,duration as [@R_936_10586@ltime] from users 
WHERE activity='cricket' and email='abc'
GROUP BY email,duration,last_update
)
SELEct activity,cast(starttime as datE) as date,SUM(datediff(second,endtimE))/60.0 as TimePerDay
from cte
where starttime >= dateadd(day,-15,last_updatE)
group by activity,cast(starttime as datE)

查询的当前输出是

activity | date        | TimePerDay
cricket  | 2015-06-16  | 80.01
cricket  | 2015-06-17  | 90.01
cricket  | 2015-06-18  | 120.01
cricket  | 2015-06-22  | 10.01

所需的输出是

activity | date        | TimePerDay
cricket  | 2015-06-16  | 80.01
cricket  | 2015-06-17  | 90.01
cricket  | 2015-06-18  | 120.01
cricket  | 2015-06-19  | 0
cricket  | 2015-06-20  | 0
cricket  | 2015-06-21  | 0
cricket  | 2015-06-22  | 10.01

解决方法@H_772_14@
你也可以试试这个: – (这只适用于一个特定的活动)
Set Nocount On;

Declare  @minDate   Date,@maxDate   Date

Declare @test Table
(
     activity       Varchar(100),date           Date,TimePerDay     decimal(5,2)
)

Declare @result Table
(
     activity       Varchar(100),2) Default 0
)

;WITH CTE AS 
(
    SELECT   email,duration As @R_936_10586@ltime 
    From    users With (Nolock)
    WHERE   activity ='cricket' 
            And email = 'abc'
    GROUP BY email,last_update
)

Insert Into @test(activity,date,TimePerDay)
SELEct   activity,Cast(starttime as datE) As date,endtimE))/60.0 As TimePerDay
From    cte With (Nolock)
where   starttime >= dateadd(day,cast(starttime as datE)

SELEct   @minDate = Min(DatE),@maxDate = Max(DatE)
From    @test

;With AllDates As
(
    SELEct   @minDate As xDate
    From    @test As t1
    Where   t1.date = @minDate

    union all

    SELEct  Dateadd(Day,1,xDatE)
    From    AllDates As ad
    Where   ad.xDate < @maxDate
)

一种方法是: – (左连接)

SELEct  'cricket' 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

另一种方式是: – (插入所有日期和更新)

Insert Into @result(activity,datE)
SELEct  'cricket',ad.xDate
From    AllDates As ad With (Nolock)

update  t
Set     t.TimePerDay = t1.TimePerDay
From    @result As t
        Join @test As t1 On t.date = t1.date

SELEct  *
From    @result As r

产量

更新

Declare  @minDate   Date,@maxDate   Date

SELEct   @maxDate = Getdate(),@minDate = Dateadd(Day,-14,@maxDatE)

;With AllDates As
(
    SELEct   @minDate As xDate

    union all

    SELEct  Dateadd(Day,xDatE)
    From    AllDates As ad
    Where   ad.xDate < @maxDate
)

SELEct   @activity As activity                      ---- @activity (your stored procedure parameter),0) As TimePerDay
From    AllDates As ad With (Nolock)
        Left Join @test As t On ad.xDate = t.date

大佬总结

以上是大佬教程为你收集整理的sql – 如何在没有执行任何活动时扩展查询以在单元格中添加0全部内容,希望文章能够帮你解决sql – 如何在没有执行任何活动时扩展查询以在单元格中添加0所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: