2014-01-09 222 views
0

我有這個疑問在2012年的SQL:SQL查詢不返回結果

選擇ID,Periodo,由於,支付,餘額,費用,注意事項,Completato, Data_pag,Ritardo FROM dbo.affitto_sa

哪些工作正常,並返回數據按照畫面的頂部:

enter image description here

我現在試圖用系統日期(現在)替換Data_pag列中的空值。 我試圖此查詢返回的圖片的底部部分中的數據:

選擇ID,Periodo,由於中,付費,餘額,費用,註釋,Completato, ISNULL(Data_pag,SYSDATETIME()) ,Ritardo FROM dbo.affitto_sa

我遇到的問題是,列名「Data_pag」消失,即使空值正確更換,不計算在列「Ritardo」的值。該列「Ritado」具有以下計算公式「(datediff(day,[Data_pag],[Periodo]))」並且被設置爲持續。 我該如何解決這兩個問題:列名並獲得計算表達式的結果?

回答

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 

你不能在同一個查詢引用計算機列。無論是使用派生的查詢,或只是使用相同的計算expresion您的另一列

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 
+0

[Rü寫作表達'DATEDIFF(日,ISNULL(Data_pag,SYSDATETIME()),periodo)作爲Ritardo'加工值來代替[Data_pag]在你的選擇查詢? – praveen

+0

這最後一次更新解決了這個問題。非常感謝您的支持。 – FeliceM

0

當您使用ISNULL()功能,列名不復存在。您需要定義新的列名稱。

至於你的第二個問題,你需要從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