Oracle Group by issue

时间:2011-03-04 00:42:10

标签: sql oracle

我有以下查询。问题是最后一列productdesc返回两个记录,并且查询由于distinct而失败。现在我需要在select查询的where子句中再添加一列,以便返回一条记录。问题是我需要的专栏 添加不应该是group by子句的一部分。

  SELECT product_billing_id,
         billing_ele,
         SUM(round(summary_net_amt_excl_gst/100)) gross,
         (SELECT DISTINCT description 
            FROM RES.tariff_nt 
           WHERE product_billing_id = aa.product_billing_id 
             AND billing_ele = aa.billing_ele) productdescr
    FROM bil.bill_sum aa
   WHERE file_id = 38613 --1=1
     AND line_type = 'D'
     AND (product_billing_id, billing_ele) IN (SELECT DISTINCT 
                                                    product_billing_id, 
                                                    billing_ele 
                                               FROM bil.bill_l2 )
     AND trans_type_desc <> 'Change'
GROUP BY product_billing_id, billing_ele

我想通过在where子句中添加一个新过滤器来修改select语句,使其返回一条记录。

(SELECT DISTINCT description 
   FROM RRES.tariff_nt 
  WHERE product_billing_id = aa.product_billing_id 
    AND billing_ele = aa.billing_ele
    AND (rate_structure_start_date <= TO_DATE(aa.p_effective_date,'yyyymmdd') 
    AND rate_structure_end_date > TO_DATE(aa.p_effective_date,'yyyymmdd'))
) productdescr

aa.p_effective_date不应该是GROUP BY子句的一部分。我该怎么做? Oracle是数据库。

2 个答案:

答案 0 :(得分:3)

因此,给定product_billing_id / billing_ele有多个RES.tariff记录,按开始/结束日期区分

您需要bil.bill_sum中包含'p_effective_date'的记录的描述。踢球者是你不能(或不想)在组中包含它。这表明你在bil.bill_sum中有多行具有不同的生效日期。

如果您要汇总具有不同日期的多个行,那么您希望发生什么?您希望将哪些日期用作获取说明的日期。

如果无关紧要,只需使用MIN(aa.p_effective_date)或MAX即可。

答案 1 :(得分:0)

您是否研究过Oracle分析函数?这是一个很好的链接Analytical Functions by Example