2014-03-07 35 views
0

我的要求是計算一個月內的付款日期。它已完成付款日期= NoOfDaysInMonth-LEAVES。如何在sql查詢中執行計算

爲了得到無天我正在使用

declare @DATE datetime 
declare @NoOfDaysInMonth int 
set @DATE='2014-3-01' 

select @NoOfDaysInMonth= DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,@DATE),0))) 
print @NoOfDaysInMonth 

這將返回31天。

以下是我以前的查詢不起作用。

******* datediff(day, MONTH(getdate()), dateadd(month, 1, month(getdate())))-(SELECT TOTALUNPAIDLEAVES FROM FN_GETTOTALLEAVESFORANEMPLOYEE(VW_EMPLOYEE_DETAILS.EMPLOYEEID,'''[email protected]+''','''[email protected]+''')) as [Paid Days] FROM VW_EMPLOYEE_DETAILS' 

在地方的

datediff(day, MONTH(getdate()), dateadd(month, 1, month(getdate()))) 

我需要傳遞變量@NoOfDaysInMonth。

@NoOfDaysInMonth-(SELECT TOTALUNPAIDLEAVES FROM FN_GETTOTALLEAVESFORANEMPLOYEE(VW_EMPLOYEE_DETAILS.EMPLOYEEID,'''[email protected]+''','''[email protected]+''')) as [Paid Days] FROM VW_EMPLOYEE_DETAILS 

修改我的代碼之後是

SET @[email protected]+' (SELECT TOTALLEAVESUSED FROM FN_GETTOTALLEAVESFORANEMPLOYEE(VW_EMPLOYEE_DETAILS.EMPLOYEEID,'''[email protected]+''','''[email protected]+''')) as [Total Leaves Used],(SELECT TOTALUNPAIDLEAVES FROM FN_GETTOTALLEAVESFORANEMPLOYEE(VW_EMPLOYEE_DETAILS.EMPLOYEEID,'''[email protected]+''','''[email protected]+''')) as [Total UnPaid Leaves], (select @DaysInMonth -(SELECT TOTALUNPAIDLEAVES FROM FN_GETTOTALLEAVESFORANEMPLOYEE(VW_EMPLOYEE_DETAILS.EMPLOYEEID,'''[email protected]+''','''[email protected]+'''))) as [Paid Days] FROM VW_EMPLOYEE_DETAILS' 
+0

現在我不明白你想用這段新代碼做什麼:SET @ COMMANDS = @ COMMANDS +'...你想在一個變量中得到結果嗎?它沒有理由變得太複雜了。 –

+0

離開所有其他代碼...我改變了代碼,你在下面告訴....(選擇@DaysInMonth - (選擇TOTALUNPAIDLEAVES從FN_GETTOTALLEAVESFORANEMPLOYEE(VW_EMPLOYEE_DETAILS.EMPLOYEEID,'''+ @ YEAR +''','''+ @ MONTH +''')))作爲[付費天數] FROM VW_EMPLOYEE_DETAILS但過程不顯示和結果(記錄)...它剛剛顯示的「命令執行成功」。 –

+0

左括號的數目是否等於數字或右括號? –

回答

1

你的計算罰款。最後一條語句應該是:

select @NoOfDaysInMonth-(SELECT TOTALUNPAIDLEAVES FROM ...) as Result 

記住執行此作爲批處理(這種說法連同前面的代碼,作爲一組語句)。否則,變量@NoOfDaysInMonth將會丟失。

+0

命令成功執行,但未顯示任何輸出。 –