2016-07-19 38 views
0

我想獲取日期範圍內的工作日數,並將其分配給一個變量,我似乎無法得到它。我已經嘗試過我的子查詢,並且它可以很好地爲我提供明確的日期,但我需要對它們進行計數。這裏,是希望將工作代碼:計數與SQL子查詢中從子句不工作

declare @end date='2016/05/06' 
declare @begin date = DATEADD(month, DATEDIFF(month, 0, @end), 0) 
declare @begin31 date = DATEADD(MONTH, -1, @end) 

declare @tmprocdays int 

    @tmprocdays = select count(*) from (select distinct WORKDATE from Daily where WORKDATE between @begin and @end) <<<----- NOT WORKING 

錯誤表示,問題是接近),我試過把事情的同時在括號以及沒有任何工作。

回答

1

試試這個

declare @end date='2016/05/06' 
declare @begin date = DATEADD(month, DATEDIFF(month, 0, @end), 0) 
declare @begin31 date = DATEADD(MONTH, -1, @end) 

declare @tmprocdays int 

set @tmprocdays = select count(*) from (select distinct WORKDATE from Daily where WORKDATE between @begin and @end) a <<<----- NOT WORKING 

OR替換上面的這最後兩行:

select @tmprocdays = count(*) 
from 
(
    select distinct WORKDATE from Daily where WORKDATE between @begin and @end 
) a 

OR更好

select @tmprocdays = count(distinct WORKDATE) from Daily where WORKDATE between @begin and @end 
+0

OMG - 我在這上幾個小時。謝謝你太棒了!我不知道你可以明確指出。你最後的解決方案非常優雅。謝謝。 – Missy

+1

@Missy你是最受歡迎的......只需檢查編輯我在最後添加了另一種替代方法,可能會更好。 – objectNotFound

1

的主要問題是缺乏的括號aro和子查詢。

這裏有一些修復了代碼:

declare @end date = '2016-05-06'; 
declare @begin date = DATEADD(month, DATEDIFF(month, 0, @end), 0); 
declare @begin31 date = DATEADD(MONTH, -1, @end); 

declare @tmprocdays int; 

select @tmprocdays = count(distinct WORKDATE) 
from Daily 
where WORKDATE between @begin and @end ; 

變化:

  • @tmprocdays =select語句本身。您的子查詢缺少括號。
  • 在每行的末尾添加分號。
  • 刪除子查詢,改爲使用count(distinct)
  • 將日期更改爲YYYY-MM-DD格式。這至少是一個ISO標準。

最後三是化妝品。

1

from子句必須始終包含一個表名,或在子查詢必須別名的情況下:

如果你的子查詢後添加任何標識符(字母詞),它會正常工作,如:

@tmprocdays = select count(*) from (select distinct WORKDATE from Daily where WORKDATE between @begin and @end) xxx