我在Sql 2012中有这个查询:
SELECT Id,Periodo,Due,Paid,Balance,Expenses,Notes,Completato, Data_pag,Ritardo来自dbo.affitto_sa
哪个正常工作并按照图片的上半部分返回数据:
我现在尝试用系统日期(现在)替换Data_pag列中的空值。 我尝试过这个查询,它返回图片底部的数据:
SELECT Id,Periodo,Due,Paid,Balance,Expenses,Notes,Completato, ISNULL(Data_pag,SYSDATETIME()),Ritardo来自dbo.affitto_sa
我遇到的问题是列名“Data_pag”消失,即使正确替换空值,也不会计算“Ritardo”列中的值。此列“Ritado”具有以下计算公式“(datediff(day,[Data_pag],[Periodo]))”并设置为持久性。 如何解决这两个问题:列名并获取计算表达式的结果?
答案 0 :(得分:1)
您需要使用alias
SELECT Id, Periodo, Due, Paid, Balance,
Expenses, Notes, Completato, ISNULL(Data_pag, SYSDATETIME()) as Data_pag,
datediff(day,isnull(Data_pag,SYSDATETIME()),Periodo) as Ritardo
FROM dbo.affitto_sa
您无法在同一查询中引用计算机列。要么使用派生查询,要么只为其他列使用相同的计算表达式
datediff(day,isnull(Data_pag,SYSDATETIME()),periodo)
或
Select a.*,
datediff(day,Data_pag,Periodo) as Ritardo
from
(
SELECT Id, Periodo, Due, Paid, Balance,
Expenses, Notes, Completato, ISNULL(Data_pag, SYSDATETIME()) as Data_pag,
Ritardo
FROM dbo.affitto_sa
)a
答案 1 :(得分:0)
使用ISNULL()
函数时,列名称不再存在。您需要定义新的列名称。
关于您的第二个问题,您需要将[Data_pag]
替换为从ISNULL()
处理的值
SELECT Id, Periodo, Due, Paid, Balance,
Expenses, Notes, Completato,
ISNULL(Data_pag, SYSDATETIME()) as Data_pag,
(datediff(day,ISNULL(Data_pag, SYSDATETIME()),[Periodo])) as Ritardo
FROM dbo.affitto_sa