2011-03-04 61 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