SQL中的CASE和GROUP BY

时间:2015-07-01 16:01:36

标签: sql case

我一直在编写一个查询,允许我为特定的产品ID和货件类型选择和计算行数。 在这些数据中,我现在想要实现的是计算哪些行具有填充的特定字段(第二个成员名称),哪些没有。然后在查询结果中将其作为单独的列返回。

这是我写的查询:

select count(job.JobID) as itemsCount, Lookup_Pack.PackDescription, Lookup_Pack.PackCode, Lookup_Pack.ID, job.shipping,

CASE 
WHEN Job.secondMemForename <> '' THEN count(job.JobID)
ELSE 0
END AS [Extra card count]
from job 
inner join Lookup_Pack on Lookup_Pack.ID = job.packTypeID
where Lookup_Pack.PackType = 'REN'
AND job.createDate >= '2015-06-01' and Job.createDate <= '2015-06-30'
GROUP BY Lookup_Pack.PackDescription, Lookup_Pack.PackCode, Lookup_Pack.ID, Job.shipping

如果我运行此查询,则会收到一条错误,因为我没有按Job.secondMemForename分组:

  

[FreeTDS] [SQL Server]列&#39; job.secondMemForename&#39;是无效的   选择列表,因为它不包含在聚合中   函数或GROUP BY子句。

虽然Job.secondMemForename不构成查询结果的一部分。 我随后将此字段添加到GROUP BY语句中,问题在于,CASE所适用的所有行返回的数据都是未分组的,因为所有这些行的Job.secondMemForename都不同。

知道如何解决这个问题吗?

感谢。 吊杆。

1 个答案:

答案 0 :(得分:3)

Count()更改为Sum()并在CASE之前添加

SUM (CASE WHEN Job.secondMemForename <> '' THEN 1 END)  AS [Extra card count]