2011-12-11 35 views
-7

我有以下查询应显示结果为最近3个月:为什么我在查询中遇到错误?

SELECT COUNT(DISTINCT dbo.UserQuiz.QuizID) AS [Total Number of Quizzes], 
    dbo.Divisions.DivisionName, 
    DATENAME(Month, dbo.UserQuiz.DateTimeComplete) AS Month 
FROM dbo.UserQuiz 
INNER JOIN dbo.Quiz 
    ON dbo.UserQuiz.QuizID = dbo.Quiz.QuizID 
INNER JOIN dbo.employee 
    ON dbo.UserQuiz.Username = dbo.employee.Username 
RIGHT OUTER JOIN dbo.Divisions 
    ON dbo.employee.DivisionCode = dbo.Divisions.SapCode 

GROUP BY dbo.Divisions.DivisionName, 
    DATENAME(Month, dbo.UserQuiz.DateTimeComplete) 
HAVING (DATENAME(Month, GETDATE()) - 
     DATENAME(Month, dbo.UserQuiz.DateTimeComplete) > 3 

现在有了这个查询的问题是,当我试图在SQLServer的管理Studio 2008 R2来执行它,我得到了以下错误我不为什么:

Msg 102, Level 15, State 1, Line 5 Incorrect syntax near '3'.

+1

良好的格式可能会提高可读性,并可能增加获得良好答案的机会。 –

+2

我不敢相信你问这个问题。 – gbn

回答

2

你的3

SELECT  
    COUNT(DISTINCT dbo.UserQuiz.QuizID) AS [Total Number of Quizzes], 
    dbo.Divisions.DivisionName, 
    DATENAME(Month, dbo.UserQuiz.DateTimeComplete) AS Month 

FROM dbo.UserQuiz 

INNER JOIN dbo.Quiz 
ON dbo.UserQuiz.QuizID = dbo.Quiz.QuizID 

INNER JOIN dbo.employee 
ON dbo.UserQuiz.Username = dbo.employee.Username 

RIGHT OUTER JOIN dbo.Divisions 
ON dbo.employee.DivisionCode = dbo.Divisions.SapCode 

GROUP BY dbo.Divisions.DivisionName, 
DATENAME(Month, dbo.UserQuiz.DateTimeComplete) 

HAVING (
    DATENAME(Month, GETDATE()) 
    - DATENAME(Month, dbo.UserQuiz.DateTimeComplete) > 3 
) -- you were missing this parenthesis 
+0

我得到这个错误:操作数数据类型nvarchar对于减算子无效。 –

+0

是的,你不能减去nvarchars。您可能需要将它们转换为int。 – danludwig

+0

你能告诉我该怎么办? –

0

后,需要一个结束括号,我相信你错过了一个“)”在你夏晖某处。

HAVING (DATENAME(Month, GETDATE()) - DATENAME(Month, dbo.UserQuiz.DateTimeComplete) > 3 
+0

the查询不起作用 –

+0

如果您发布代码,XML或数据样本,请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(“{}”)以精确地格式化和语法突出它! –

+0

我也有一个错误。它是消息8117,级别16,状态1,行20 操作数数据类型nvarchar对于减法运算符无效。 –

相关问题