ISNULL函数与LEAD函数结合使用遇到问题求助
解决LEAD与ISNULL结合使用的问题
你的问题出在ISNULL函数的语法使用错误——你把LEAD列的别名NextStateTime放在了ISNULL的括号内部,这不符合SQL语法规则。正确的做法是先通过LEAD计算出目标值,再用ISNULL包裹整个LEAD表达式,最后给处理后的结果加上别名。
修正后的完整SQL语句
DECLARE @ReportTimeStart DATETIME = '2019-04-25 06:50' DECLARE @ReportTimeEnd DATETIME = '2019-04-25 23:59'; SELECT [tbl_tg_machinestate_ndx], [Machine_State], [t_stamp], ISNULL(LEAD([t_stamp]) OVER (ORDER BY [tbl_tg_machinestate_ndx]), @ReportTimeEnd) AS NextStateTime FROM [db_SPE_Carrig].[dbo].[tbl_TG_MachineState] WHERE [t_stamp] BETWEEN @ReportTimeStart AND @ReportTimeEnd
逻辑说明
- LEAD函数会按指定顺序获取下一行的
t_stamp值,最后一行没有后续行,所以默认返回NULL - ISNULL函数会检查LEAD的返回结果:如果是NULL,就替换为你设定的报表结束时间
@ReportTimeEnd;否则保留原有的t_stamp值 - 别名
AS NextStateTime需要放在整个ISNULL表达式的末尾,用来命名处理后的列
执行这段代码后,最后一行的NextStateTime就会显示为2019-04-25 23:59,而不是NULL了。
内容的提问来源于stack exchange,提问作者NickoRoboto
相关产品推荐
相关产品推荐

