我一直在编写一个查询,允许我为特定的产品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都不同。
知道如何解决这个问题吗?
感谢。 吊杆。
答案 0 :(得分:3)
将Count()
更改为Sum()
并在CASE
之前添加
SUM (CASE WHEN Job.secondMemForename <> '' THEN 1 END) AS [Extra card count]