如果我只在 WHEN 子句中有条件需要它,为什么在 GROUP BY 子句中需要一个字段?

卢西亚诺·马托斯

我正在尝试创建一个查询以获得如下图所示的结果。

每人一行。

在此处输入图片说明

问题是,当我创建查询时,我只将它们用于 WHEN CLAUSE 的字段(我什至不需要将它们显示为结果),它显示为错误,要求将它们添加到 GROUP条款或聚合函数。这可能是在我的结果中为每个用户创建重复的行。

如果我将 UserLogon、JobPageFormat 和 JobIsDuplex 放在 group 子句中,我的查询就会运行。

我使用的数据库是 MS SQL Server 2008

请看我的sql查询

select UserLogon, count(TrackingId) as Jobs,

case
when JobPageFormat = 'A3' then SUM(TrackingPageCount*2)
when JobPageFormat != 'A3' then SUM(TrackingPageCount) 
end as Total_Pages, 

case
when JobPageFormat = 'A3' then SUM(TrackingColorPageCount*2)
when JobPageFormat != 'A3' then SUM(TrackingColorPageCount)
end as Color_Pages,

case
when JobPageFormat = 'A3' then (SUM(TrackingPageCount*2) - SUM(TrackingColorPageCount*2))
when JobPageFormat != 'A3' then (SUM(TrackingPageCount) - SUM(TrackingColorPageCount))
end as Mono_Pages,

case
when JobPageFormat = 'A3' and JobIsDuplex = 0 then SUM(TrackingPageCount*2)
when JobPageFormat != 'A3' and JobIsDuplex = 0 then SUM(TrackingPageCount)
end as Simplex,

case
when JobPageFormat = 'A3' and JobIsDuplex = 1 then SUM(TrackingPageCount*2)
when JobPageFormat != 'A3' and JobIsDuplex = 1 then SUM(TrackingPageCount)
end as Duplex

from scTracking 

where ComputerName like '%ServerXXX%'
and JobType in (1,2,3)
and StartDateTime > '2019-09-01'
and StartDateTime < '2019-10-01'
group by UserLogon, JobPageFormat, JobIsDuplex
order by UserLogon

查看我在下面得到的结果

在此处输入图片说明

有谁知道如何在不复制结果的情况下执行此查询?

亲切的问候,卢西亚诺

D斯坦利

您应该将总和更改为在 case 表达式之外:

SUM(case
    when JobPageFormat = 'A3' then TrackingPageCount
    ELSE TrackingPageCount
    end) as Total_Pages, 
SUM(CASE WHEN JobIsDuplex = 0 
        THEN
        CASE when JobPageFormat = 'A3' then TrackingPageCount*2
        ELSE TrackingPageCount
    end) as Simplex,
etc.

然后你可以取出JobPageFormatJobIsDuplex取出 group by 子句。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么Django ORM在GROUP BY子句中添加了一个未指定的字段

如果我在mysql中创建两个字段索引,是否需要一个字段索引

需要一个字段,如果另一个不存在

如果填充一个字段,则在xml中需要其他字段吗?

如果我有财产,我还需要一个字段吗?

如果我只需要通过套接字发送 1 个字节,我可以只使用一个字符吗?

为什么在使用OVER(PARTITION BY x)时需要在GROUP BY中包含一个字段?

如果两列都不是 NULL,我如何让 SQL 'When' 子句只返回 concat 数据?

JSONSchema - 如果属性为 true - 需要另一个字段

为什么Redshift希望我在GROUP子句中具有所有未聚合的列?

如何引用在WHERE子句中计算的另一个字段?

SQL语法-为什么我们需要在SQL group-by语句中列出各个字段?

我需要一个字段的默认创建值作为当前登录用户

我在if ... else if语句中是否需要最后一个else子句?

如果我需要一个自动递增的ID但又想检查另一个字段上的重复项,该如何定义我的模型?

我需要创建一个字段,该字段是maxdate的第二个日期

Laravel验证:如果另一个字段可用,则需要两个字段中的任何一个

SQL:是否需要在 SELECT 子句中列出 GROUP BY 子句中的所有属性?

如果只需要一个字段,如何在接口中使用ignorecase

我想编写一个方法,该方法需要一个字段名和一个新值

我需要一个查询,当一个字段相同时,它将返回两个表的所有行和所有列

Mongo尝试在更新时创建一个字段,尽管我不需要这个

需要一个可迭代的,我有一个字典列表

如果只写一个值,我需要原子的吗?

需要一个字段或另一个字段

为什么我们称目标子句中没有一个是肯定的文字的析取呢?

如果满足两个条件(一个在 WHERE 子句中,另一个在 HAVING 子句中)中的任何一个,则选择行

LINQ的GroupBy子句中有多个字段(其中一个是计算字段)

如果 column1 匹配一个字符串,我需要什么 mysql 函数?