【问题标题】:CASE and GROUP BY in SQLSQL 中的 CASE 和 GROUP BY
【发布时间】:2015-07-01 16:01:35
【问题描述】:

我一直在编写一个查询,允许我选择和计算特定产品 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]列 'job.secondMemForename' 在 选择列表,因为它不包含在任一聚合中 函数或 GROUP BY 子句。

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

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

谢谢。 斯蒂夫。

【问题讨论】:

标签: sql case


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 2021-06-25
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多