SSRS 보고서에 대해이 문제를 해결하고 싶습니다. @startdate와 @enddate 사이의 모든 날짜를 표시하고 싶습니다. 이 부분을 완료했습니다. 다음으로, 데이터가 존재하지 않는 날짜에 대해 고유 한 열 값 ( "name"이라는 열)을 표시하려고합니다. (즉, 내가 생성하는 모든 날짜에 대해 aa, bb)
내가 얻는 것 :
데이트 | 이름 | 값 |
---|---|---|
2021 년 1 월 1 일 00:00:00 | 데이터 없음 | 데이터 없음 |
2021 년 2 월 1 일 00:00:00 | 데이터 없음 | 데이터 없음 |
2021 년 3 월 1 일 00:00:00 | aa | 23 |
2021 년 3 월 1 일 00:01:00 | bb | 32 |
2021 년 4 월 1 일 00:00:00 | aa | 54 |
2021 년 4 월 1 일 00:01:00 | bb | 90 |
내가 원하는 것 :
데이트 | 이름 | 값 |
---|---|---|
2021 년 1 월 1 일 00:00:00 | aa | 데이터 없음 |
2021 년 1 월 1 일 00:00:00 | bb | 데이터 없음 |
2021 년 2 월 1 일 00:00:00 | aa | 데이터 없음 |
2021 년 2 월 1 일 00:00:00 | bb | 데이터 없음 |
2021 년 3 월 1 일 00:00:00 | aa | 23 |
2021 년 3 월 1 일 00:01:00 | bb | 32 |
2021 년 4 월 1 일 00:00:00 | aa | 54 |
2021 년 4 월 1 일 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] 삭제
몇 마디 만하겠습니다