select
s.RollNumber, s.[Payment Date], s.Amount, h.HourKey, d.Year
from
[Accounts].[dbo].StudentFeesDetails s
inner join
[ABCU_DWH].[dbo].DimHourOFTheDay h on h.HourKey = DATEPART(Hour, s.[Payment Date])
inner join
[ABCU_DWH].[dbo].DimDates d on d.[Full Date] = s.[Payment Date]
where
RollNumber = 5
s.[Payment Date]
是Datetime
数据类型的列。查询不会产生任何结果。通过注释一个连接语句,查询将生成结果。那么这段代码中的问题是什么?
答案 0 :(得分:2)
如果s.[Payment Date]
是日期时间值,它也有一个时间组件,并且您没有收到任何数据的原因可能是时间部分与{{{ 1}}(我假设是约会)。
尝试将其投射到某个日期:
[Full Date]
如果inner join [ABCU_DWH].[dbo].DimDates d
on d.[Full Date] = cast(s.[Payment Date] as date)
是一个日期时间,您可能还需要强制转换,以便最终只比较日期部分:
[Full Date]
答案 1 :(得分:1)
您似乎在尝试将日期时间与第二次加入中的日期进行比较 尝试改变:
inner join [ABCU_DWH].[dbo].DimDates d
on d.[Full Date] = s.[Payment Date]
到下一个:
inner join [ABCU_DWH].[dbo].DimDates d
on CAST(d.[Full Date] AS DATE) = CAST(s.[Payment Date] AS DATE)