我希望在开始日期和结束日期之间对表中声明为varchar(50)
的字段, Emp_Data 进行求和,并将其分组为 Emp_ID 。< / p>
Emp_Data 架构
Emp_ID as varchar(50),
Emp_Name as varchar(50),
Processing_Date as datetime,
PR as varchar(50),
Lines as varchar(50),
Followup as varchar(50)
Employee_Details 架构
emp_id as varchar(50),
Emp_Name as varchar(50),
Manager as varchar(50),
Target as int.
我尝试了一个查询:
SELECT PS.emp_id,
PS.emp_Name,
Sum(PR_Validation),
Sum(Lines),
Sum(RC_Number),
Sum(Followup),
Sum(Manual_Order),
Sum(Quotes_Processed)
FROM Emp_Data AS PS
INNER JOIN tbl_Employee_Details AS ED
ON ED.manager = 'Viswanathan'
AND PS.processing_date BETWEEN '01/01/2017' AND '01/31/2017'
GROUP BY PS.emp_Id
但是我收到了错误
&#34;专栏&#39; Emp_Data.Emp_Name&#39;因为它在选择列表中无效 不包含在聚合函数或GROUP BY中 子句。
我是SQL Server新手。
答案 0 :(得分:0)
我认为您正在使用SQL Server。如果是这样,最好的方法是将您的号码存储为数字。这就是SQL有多种内置数据类型的原因。它们用于不同的事物。
但是,如果你坚持使用字符串,那就起诉try_convert()
。我不知道实际的类型,所以我只是输入整数:
SELECT PS.emp_id, PS.emp_Name,
Sum(try_convert(int, PR_Validation)),
Sum(try_convert(int, Lines)),
Sumtry_convert(int, (RC_Number)),
Sum(try_convert(int, Followup)),
Sum(try_convert(int, Manual_Order)),
Sum(try_convert(int, Quotes_Processed))
FROM Emp_Data PS INNER JOIN
tbl_Employee_Details AS ED
ON ED.manager = 'Viswanathan' AND
PS.processing_date >= '2017-01-01' AND
PS.processing_date < '2018-01-01'
GROUP BY PS.emp_Id, PS.emp_Name ;
关于为什么我将BETWEEN
更改为不等式的讨论,请阅读Aaron Bertrand的blog on the subject。 (请注意,这适用于SQL Server以外的数据库。)我还认为您应该始终使用ISO标准日期格式,YYYYMMDD(在SQL Server中最好使用)或YYYY-MM-DD(几乎与好的,适用于其他数据库,更具人性化。)
您也可能打算COUNT()
而不是SUM()
。在这种情况下,转换不是必需的。