T-SQL - 插入特定时间段的缺失数据

T-SQL - Insert Missing Data for Specific Period of Time

我无法解决这个缺少 4/13-4/15 数据的问题。见截图:Daily Subscriber Counts

此屏幕截图由[编辑:部分]以下代码制作:

SELECT  
    MIN([AsOfDate]) AS StartDate,
    MAX([AsOfDate]) AS EndDate,
    SUM([TotalCustomers]) AS TotalSubs,
    SUM([HSDCustomers]) AS HSDSubs,
    SUM([PhoneCustomers]) AS PhoneSubs,
    SUM([VideoCustomers]) AS VideoSubs
FROM 
    [vDailyCustomerCounts]
WHERE
    Sourcesystem = 'ICOMS'
    AND (Asofdate BETWEEN '4/8/2018' AND '4/18/2018')
    AND iscommercial = 0
GROUP BY 
    [AsOfDate]
ORDER BY 
    [AsOfDate] DESC

基本上我的问题是我需要将 "dummy" 数据插入到 select 语句中。我需要为 2018-04-13 到 2018-04-15 创建一行,并使用一般计数(如 502,900)或使用前一天的计数来填充它。

理想情况下,我想创建如下所示的内容:

StartDate   End Date     TotalSubs
----------------------------------
2018-04-13  2018-04-13   502900

我只想在数据集中缺少一天的情况下插入这个虚拟数据。如果有任何帮助,我将不胜感激!

查看此网页:https://docs.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql?view=sql-server-2017

如果存在不需要的值,您可以在 SELECT 语句中使用 CASE 来选择一个虚拟值。

使用这样的循环首先填写您缺少的日期 - 然后添加默认值并继续您的聚合

  declare @mindate datetime=(select min(Asofdate) from vDailyCustomerCounts)
  declare @maxdate datetime=(select max(Asofdate) from vDailyCustomerCounts)
  declare @date datetime=@mindate
  declare @missing table(datevalue datetime )
  while @date<@maxdate
  begin
  if @date not in (select Asofdate from vDailyCustomerCounts)
  insert @missing 
  select @date
  set @date=@date+1 
  end 


select a.datevalue, 
    b.TotalCustomers ,
    b.HSDCustomers ,
    b.PhoneCustomers,
    b.VideoCustomers 
from (select Asofdate from vDailyCustomerCounts  
union select * from @missing )a 
        left join vDailyCustomerCounts b on a.Asofdate =b.Asofdate