2011-03-04 62 views
0

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

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是数据库。

回答

3

所以有多个RES.tariff记录,对于一个给定product_billing_id/billing_ele,在开始/结束日期分化

您想为涵盖从BIL的“p_effective_date”记录的说明.bill_sum。踢球者是你不能(或不想)在小组中加入。这表明你在bil.bill_sum中有多行,并且有不同的生效日期。

问题是如果您总结了具有不同日期的多行,您希望发生什么情况。您希望使用哪一个日期作为获取描述的日期。

如果没关系,只需使用MIN(aa.p_effective_date)或MAX。

+0

非常感谢。 Oracle解析函数是解决这个问题的唯一方法吗? – Arav 2011-03-06 22:33:15

0

你看过Oracle的分析功能吗?这是很好的链接Analytical Functions by Example

+0

-1因为分析函数在聚合行时很少有帮助,并且此答案不会帮助原始海报。 – 2011-03-04 08:09:15

+0

非常感谢。 Oracle解析函数是解决这个问题的唯一方法吗? – Arav 2011-03-06 22:32:39