【问题标题】:Filter on column values not in select过滤不在选择中的列值
【发布时间】:2018-11-26 21:46:49
【问题描述】:

我正在尝试对两个表进行连接并筛选不在我的 select 语句中的值。

以下查询不起作用。

select b.[[Product]].[Major Category]]] ,sum(a.BIC_ZCDP) from TEMP_FORECAST_ALL a
join OUT_Dimension_DP_Product b
on right(a.MATERIAL,10) = b.[[Product]].[10D]]]  
join OUT_Dimension_DP_Market c
on a.BIC_ZRMARKET =  c.[[Market]].[Market]]]
group by b.[[Product]].[Major Category]]]
having a.CALMONTH in ('201810','201811','201812') and c.[[Market]].[Region]]] = 'UK'

我收到以下错误

消息 8121,第 16 级,状态 1,第 7 行 HAVING 子句中的“TEMP_FORECAST_ALL.CALMONTH”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

消息 8121,第 16 级,状态 1,第 7 行 HAVING 子句中的“TEMP_FORECAST_ALL.CALMONTH”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

消息 8121,第 16 级,状态 1,第 7 行 HAVING 子句中的“TEMP_FORECAST_ALL.CALMONTH”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

消息 8121,第 16 级,状态 1,第 7 行 HAVING 子句中的列 'OUT_Dimension_DP_Market.[Market].[Region]' 无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

我不想在我的 group by 子句中添加 Region 和 CALMONTH。

【问题讨论】:

标签: sql sql-server


【解决方案1】:

使用WHERE 子句。 . . :

select p.[[Product]].[Major Category]]], sum(a.BIC_ZCDP)
from TEMP_FORECAST_ALL a join 
     OUT_Dimension_DP_Product p
     on right(a.MATERIAL,10) = b.[[Product]].[10D]]] join
     OUT_Dimension_DP_Market m
     on a.BIC_ZRMARKET = m.[[Market]].[Market]]]
where a.CALMONTH in ('201810', '201811', '201812') and
      m.[[Market]].[Region]]] = 'UK'
group by p.[[Product]].[Major Category]]];

【讨论】:

    【解决方案2】:

    having 仅用于聚合。由于这只是简单的比较,因此您希望它们在 where 子句中。例如,如果您要与 sum 或其他聚合进行比较,您会使用 having

    【讨论】:

      【解决方案3】:

      Having子句在我们使用聚合函数时使用,但这里你只是做比较,所以你必须使用where子句。

      【讨论】:

        【解决方案4】:

        当您过滤聚合数据时使用 HAVING 子句,即,如果您想过滤 SUM 语句的结果,如下所示: HAVING SUM(a.BIC_ZCDP) > 0

        但是,出于查询的目的,您只需将HAVING 切换为WHERE,这样...

        SELECT
            b.[[Product]].[Major Category]]],
            SUM(a.BIC_ZCDP) 
        
        FROM
            TEMP_FORECAST_ALL a
                INNER JOIN OUT_Dimension_DP_Product b ON right(a.MATERIAL,10) = b.[[Product]].[10D]]]
                INNER JOIN OUT_Dimension_DP_Market c ON a.BIC_ZRMARKET =  c.[[Market]].[Market]]]
        
        WHERE
            (a.CALMONTH IN ('201810','201811','201812')) AND (c.[[Market]].[Region]]] = 'UK')
        
        GROUP BY
            b.[[Product]].[Major Category]]]
        

        同样,HAVING 子句允许您过滤已为 AGGREGATED (SUM, MAX, MIN, etc.) 的字段,而 WHERE 子句允许您过滤普通字段。

        【讨论】:

          猜你喜欢
          • 2020-11-21
          • 2021-11-25
          • 1970-01-01
          • 2020-10-09
          • 1970-01-01
          • 1970-01-01
          • 2010-10-15
          • 1970-01-01
          • 2023-03-23
          相关资源
          最近更新 更多