2014-11-06 50 views
0

我寫此查詢它工作正常,但是當我添加group by Date它,那麼它將返回一個錯誤:爲什麼日期欄不與組工作,返回錯誤子查詢返回多個值

Subquery returned more than 1 etc

我的代碼:

Declare @FromDate datetime set @FromDate='2014-11-01 09:01:11.927' 
Declare @ToDate datetime set @ToDate='2014-11-06 05:01:11.927' 
Declare @Day int 

Set @Day= (Select Count(*) from Attendance where 
    AttendanceDate >= @FromDate AND AttendanceDate < dateadd(day,1, @ToDate) 
    AND Attendance.DepartmentShiftHistory_ID=47 
    and organization_id=40 
    group by Attendance.DepartmentShiftHistory_ID,cast(AttendanceDate as date),User_ID 
) 

    print @Day 
+2

因此,您按日期和日期範圍進行分組,以便處理7天的覆蓋(部分) - 並且您驚訝於獲得7個結果而不是1個?你認爲在這裏會發生什麼? – 2014-11-06 08:19:36

+0

那麼什麼是解決方案,我需要將它分組 – 2014-11-06 09:05:43

+0

我無法回答,因爲我不知道*爲什麼*你認爲'group by'是解決方案(的一部分) - 我既沒有你的數據也沒有知道您的*預期*結果。我所得到的只是一個試圖生成(看起來)單個數字並且正在應用「GROUP BY」子句的查詢(在現有查詢中添加一個*只能導致可能將單個結果拆分爲多個結果) – 2014-11-06 09:07:47

回答

0

當你正在做的原始查詢(不分組),它返回一個數字,如1337年 當你組它按日期,它將返回,加起來就是原來的號碼號(1000 ,300,30,7),你將無法爲變量賦值。

如果您希望獲得總天數,請分組。

如果你想有每一天的結果,你應該把它插入到一個臨時表像

Select AttendanceDate, Count(*) 
from Attendance 
into #Days 
where AttendanceDate >= @FromDate AND AttendanceDate < dateadd(day,1, @ToDate) 
AND Attendance.DepartmentShiftHistory_ID=47 
and organization_id=40 
group by Attendance.DepartmentShiftHistory_ID,cast(AttendanceDate as date),User_ID 

SELECT * FROM #Days 
0

嘗試用這種

Declare @FromDate datetime set @FromDate='2014-11-01 09:01:11.927' 
Declare @ToDate datetime set @ToDate='2014-11-06 05:01:11.927' 
Declare @Day int 

Set @Day= (Select top 1 Count(*) OVER() from Attendance where 
    AttendanceDate >= @FromDate AND AttendanceDate < dateadd(day,1, @ToDate) 
    AND Attendance.DepartmentShiftHistory_ID=47 
    and organization_id=40 
    group by Attendance.DepartmentShiftHistory_ID,cast(AttendanceDate as date),User_ID 
) 

    print @Day 

在這裏,我還使用 - 前1計數(*)OVER()即用於得到「計數由記錄組返回的記錄數」

0

感謝您的答覆,但沒有解決方案爲我工作,所以我試了這個工作

set @Day=(select count(*) from (Select count(*) 'is' from Attendance where 
     AttendanceDate >= @FromDate AND AttendanceDate < dateadd(day,1, @ToDate) 
     AND [email protected]_ID 
     and [email protected] 
     group by Attendance.DepartmentShiftHistory_ID,cast(AttendanceDate as date) 
     ) as c)