筛选不在选择中的列值

时间:2018-11-26 21:46:49

标签: sql sql-server

我试图在两个表上进行联接,并根据我的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行   列'TEMP_FORECAST_ALL.CALMONTH'在HAVING子句中无效,因为它不包含在聚合函数或GROUP BY子句中。

     

信息8121,第16级,状态1,第7行   列'TEMP_FORECAST_ALL.CALMONTH'在HAVING子句中无效,因为它不包含在聚合函数或GROUP BY子句中。

     

信息8121,第16级,状态1,第7行   列'TEMP_FORECAST_ALL.CALMONTH'在HAVING子句中无效,因为它不包含在聚合函数或GROUP BY子句中。

     

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

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

4 个答案:

答案 0 :(得分:0)

使用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]]];

答案 1 :(得分:0)

dataframe %>% missing_pairs(dependent, explanatory) 仅适用于汇总。由于这只是简单的比较,因此您需要在having子句中进行比较。例如,如果您要与where或其他汇总进行比较,则可以使用having

答案 2 :(得分:0)

在使用聚合函数时会使用

具有子句,但是这里您只是在进行比较,因此必须使用 where 子句。

答案 3 :(得分:0)

在对聚合数据进行过滤时,即,如果您要对SUM语句的结果进行过滤,则使用HAVING子句,如下所示: 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子句允许您过滤普通字段。