微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SSRS 报告/SQL Server:即使特定日期没有数据,也显示不同的列值

如何解决SSRS 报告/SQL Server:即使特定日期没有数据,也显示不同的列值

我想为 SSRS 报告解决这个问题。我想显示@startdate 和@enddate 之间的所有日期。这部分我已经完成了。接下来,我想为数据不存在的日期显示不同的列值(对于名为“name”的列)。 (即我生成的所有日期的 aa,bb)

我得到了什么:

日期 姓名 价值
01/01/2021 00:00:00 没有数据 没有数据
02/01/2021 00:00:00 没有数据 没有数据
03/01/2021 00:00:00 aa 23
03/01/2021 00:01:00 bb 32
04/01/2021 00:00:00 aa 54
04/01/2021 00:01:00 bb 90

我想要的:

日期 姓名 价值
01/01/2021 00:00:00 aa 没有数据
01/01/2021 00:00:00 bb 没有数据
02/01/2021 00:00:00 aa 没有数据
02/01/2021 00:00:00 bb 没有数据
03/01/2021 00:00:00 aa 23
03/01/2021 00:01:00 bb 32
04/01/2021 00:00:00 aa 54
04/01/2021 00:01:00 bb 90

这是我的尝试:

DECLARE @STARTDATE DateTime
DECLARE @ENDDATE DateTime
SET @STARTDATE = '2021-01-01'
SET @ENDDATE = '2021-01-04'
;with dates ([Date]) as (
    Select convert(date,@STARTDate) as [Date] 
    union all 
    Select dateadd(day,1,[Date])
    from dates
    where [Date] <= @ENDDATE 
)

select 
isnull(n.Created_Date,d.date) Date,isnull(n.[NAME],'No Data') [NAME],isnull(n.[VALUE],'No Data') [VALUE]
from dates d
left join Table_A n on convert(varchar,n.Created_Date,101) = d.Date
where

([Created_Date] between (@StartDate) and (@EndDate) or
[Date] between (@StartDate-1) and (@EndDate) )
option (maxrecursion 32767)


任何帮助将不胜感激。

解决方法

我称这种模式为“交叉连接,左连接”。您使用交叉连接创建所有可能值的矩阵,然后使用左连接填充可用值。

所以你需要一个包含所有可能的 Names 的表来交叉连接。例如

DECLARE @STARTDATE DateTime
DECLARE @ENDDATE DateTime
SET @STARTDATE = '2021-01-01'
SET @ENDDATE = '2021-01-04'
;with dates ([Date]) as (
    Select convert(date,@STARTDate) as [Date] 
    union all 
    Select dateadd(day,1,[Date])
    from dates
    where [Date] <= @ENDDATE 
),names as
(
  select distinct Name 
  from Table_A
)
select 
isnull(n.Created_Date,d.date) Date,names.Name [NAME],isnull(n.[VALUE],'No Data') [VALUE]
from dates
cross join names
left join Table_A n 
  on n.Created_Date = dates.Date
  and n.Name = names.Name
where dates.[Date] between dateadd(day,-1,@StartDate) and @EndDate 
option (maxrecursion 32767)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。