sql 2008查询。我正在尝试更正此错误消息

时间:2010-06-15 04:06:01

标签: sql-server

这段代码有什么问题?什么是正确的语法?

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.

4 个答案:

答案 0 :(得分: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表的猜测)都不是您想要的,请显示该表的架构(理想情况下只是与问题相关的部分)以及您想要的输出的简单示例该表的简短示例内容 - 请注意阅读您的想法(当您不提供问题的详细信息时)对我们来说不值得进行,因此提供所有相关信息,包括您的规格和理想情况一个小例子,是迄今为止快速和提供信息的最佳方式。

答案 1 :(得分:0)

应该是

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

答案 2 :(得分:0)

应该是这样的:

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

SUM不能应用于varchar包含文本。它只能应用于数值。

希望如果您尝试使用group显示错误,则应该在聚合函数中添加它,尝试使用某些列具有数值。

答案 3 :(得分:0)

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

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