2010-06-15 52 views
0

此代码有什么问题?什么是正确的语法?sql 2008查询。我正在尝试更正此错误讯息

SELECT EmployeeID, SUM('More than 2 orders') 
FROM Orders 
WHERE EmployeeID >2 
GROUP BY EmployeeID 


Msg 8117, Level 16, State 1, Line 1 
Operand data type varchar is invalid for sum operator. 
+0

您想做什么? – gbn 2010-06-15 04:49:18

+0

您需要接受所有问题的答案或者人们会停止发布答案 – 2010-06-25 05:10:46

回答

1

SUM('More than 2 orders')是没有意义的,因为错误消息要告诉你的一部分 - 你SUM数字字段(或表达式),而不是varchar(即字符串)常量。

你到底想要做什么,用“字符串的总和”呢?

编辑:在OP中的评论澄清(OP,编辑你的问题是一个更好的主意!):

我想知道有多少员工 已经处理了至少2个数量级和TOS 员工数量如何。

要显示员工“已经处理了至少两个数量级”,假设例如有表中的每个订单已处理记录:

SELECT EmployeeID 
FROM Orders 
GROUP BY EmployeeID 
HAVING COUNT(*) >= 2 

这并不表明正确命令那些雇员处理(上述澄清没有要求),也没有显示这些雇员的数量 - 如果这是要求而不是雇员的ID,

SELECT COUNT(DISTINCT EmployeeID) 
FROM Orders 
GROUP BY EmployeeID 
HAVING COUNT(*) >= 2 

如果这些猜测(或者我对Orders表的猜测)都不是您想要的,请显示该表的模式(理想情况下只是与问题相关的部分)以及您想要的输出的简单示例对于表格的简短示例内容 - 请意识到阅读您的想法(当您不提供问题的详细信息时)对我们来说不是一个有意义的练习,因此提供所有相关信息,包括您的规格和理想情况下,一个小例子是迄今为止让您的问题迅速而翔实地回答的最佳方式。

+0

感谢您的帮助。其实,我想知道有多少员工处理了至少2个订单,并且知道员工数量。 – getbruce 2010-06-15 05:52:44

0

应该

SELECT 
    EmployeeID, 
    SUM(Col1), 
    SUM(Col2), 
    .. 
    .. 
FROM 
    Orders 
WHERE 
    EmployeeID > 2 
GROUP BY 
    EmployeeID 
+0

您怎么知道? – gbn 2010-06-15 04:48:56

+0

感谢您的帮助。其实,我想知道有多少员工处理了至少2个订单,并且知道员工数量。 – getbruce 2010-06-15 05:53:03

0

应该是这样:

SELECT EmployeeID, SUM(Column) FROM Orders WHERE EmployeeID >2 GROUP BY EmployeeID. 

总和不能应用于VARCHAR包含文本。它只能应用于数值。

希望如果您尝试使用group by其所显示的错误,那么聚合函数应该在那里,因此您添加了它,尝试使用某个列具有数值。

+0

感谢您的帮助。其实,我想知道有多少员工处理了至少2个订单,并且知道员工数量。 – getbruce 2010-06-15 05:53:29

0

如果我正确地翻译了您的评论,您希望每个员工拥有2个或更多订单的员工ID。以下声明为您提供:

select EmployeeID from Orders group by EmployeeID having count(EmployeeID) > 1