我有一個表,看起來像這樣:爲什麼這些合計金額不同?
CREATE TABLE [dbo].[StudentTime]
([StudentTimeID] [int] NOT NULL IDENTITY(164352, 1),
[StudentID] [int] NOT NULL,
--Some columns...
[EntryDateTime] [datetime] NOT NULL,
[Hours] [decimal] (6, 2) NOT NULL CONSTRAINT [DF_StudentTime_Hours] DEFAULT ((0))
--Some more columns
)
當我查詢它
SELECT COUNT(DISTINCT StudentID) AS StudentCount,
SUM(HOURS) AS TotalHours
FROM dbo.StudentTime
WHERE EntryDateTime >= '5/1/2010'
AND EntryDateTime < '5/1/2011'
我得到這樣的結果:
StudentCount: 9890
TotalHours: 775645.5
現在我想篩選學生出的無論出於何種原因,在該報告期內累計0小時的人數:
SELECT COUNT(DISTINCT StudentID) AS StudentCount,
SUM(HOURS) AS TotalHours
FROM dbo.StudentTime
WHERE EntryDateTime >= '5/1/2010'
AND EntryDateTime < '5/1/2011'
AND Hours > 0
我得到這樣的結果:
StudentCount: 9792 --Expected to be smaller.
TotalHours: 775699.25 --Expected to be same, but is larger?!?!
是不是因爲我有AND Hours > 0
(一個int)VS AND Hours > 0.0
(一個十進制)?當我這樣做時,有沒有一個隱含的CAST正在進行?
查詢的結果是什麼:'SELECT COUNT(*)FROM StudentTime WHERE Hours <0'? – CodeNaked 2011-05-17 16:27:03
34個記錄。我想知道那是不是?沒有限制,說EntryDateTime必須大於ExitDateTime(未顯示),無論是在應用程序代碼還是數據庫中。 – NateMpls 2011-05-17 16:31:02
Bingo,CodeNaked,負數小時的總和是-54左右。如果您發佈答案,我會接受。 :-) 謝謝! – NateMpls 2011-05-17 16:33:39