2017-03-27 32 views
-3

查詢效果很好,但是當IAM將其添加組給了我[錯誤] ORA-01427這裏是主查詢如何與羣組一起使用?

SELECT DISTINCT Contract_number, 
       area_number, 
       area_name, 
       ADVANCE_PAY, 
       Postponed_Amount, 
       extract_number, 
       total 
FROM (SELECT xxr.Contract_num Contract_number, 
      xxr.p_area_no area_number, 
      xxr.p_area_name area_name, 
      xxr.ADVANCE_PAY ADVANCE_PAY, 
      xxr.DEFERRED_BOOST Postponed_Amount, 
      xxr.release_num extract_number, 

,這裏是case語句:

(SELECT DISTINCT 
        CASE 
         WHEN :p_item_code IS NOT NULL 
         THEN 
          TOTAL_AMOUNT 
         WHEN :p_item_code IS NULL 
         THEN 
          ((SELECT NVL (SUM (TOTAL_AMOUNT), 0) 
           FROM XXEXTRACT.XXNATGAS_REALSES_LINES 
           WHERE XXEXTRACT.XXNATGAS_REALSES.release_id = 
             XXEXTRACT.XXNATGAS_REALSES_LINES.release_id)) 
         ELSE 
          NULL 
        END 
       FROM XXEXTRACT.XXNATGAS_REALSES_LINES xxrl, 
        XXEXTRACT.XXNATGAS_REALSES 
       WHERE  1 = 1 
        AND xxrl.release_id = 
          XXEXTRACT.XXNATGAS_REALSES.release_id) 
       AS total 

和這裏從該部分:

FROM XXEXTRACT.XXNATGAS_REALSES_LINES xxrl, 
      XXEXTRACT.XXNATGAS_REALSES xxr 
     WHERE 1 = 1 
     AND xxrl.release_id = xxr.release_id 
     AND xxr.release_date >= NVL (:p_date_from, xxr.release_date) 
      AND xxr.release_date <= NVL (:p_date_to, xxr.release_date) 
      AND xxr.Contract_num = NVL (:p_cont_num, xxr.Contract_num) 
      AND xxr.vendor_id = NVL (:p_ven_id, xxr.vendor_id) 
      AND xxr.vendor_site_id = NVL (:p_site_id, xxr.vendor_site_id) 

      ) 

,這裏是在GROUP BY:

GROUP BY Contract_number, 
    area_number, 
    area_name, 
    ADVANCE_PAY, 
    Postponed_Amount, 
    extract_number, 
    total; 

這些是完整的查詢,所以請任何幫助

+1

也許你應該問一個關於樣本數據,期望結果和你想做什麼的解釋的問題。 –

+2

顯示完整查詢,而不僅僅是部分。順便說一句,「DISTINCT」和「GROUP BY」都是這樣,兒子只需要其中一個。 – dnoeth

+0

如果用戶輸入特定參數(總金額是列名),我想獲得總金額,並獲得總金額的總和,如果用戶dosent輸入任何參數 – Tarek

回答

0

肯定我不明白你的查詢。您可以在下次改進您的帖子。

作爲回答,我認爲你應該使用select作爲子查詢來封裝你的select語句和group。這不是最好的方法,但它可以正常工作。

select * 
from (
    select distinct Contract_number 
     ,area_number 
     ,area_name 
     ,ADVANCE_PAY 
     ,Postponed_Amount 
     ,extract_number 
     ,total 
    from (
     select xxr.Contract_num Contract_number 
      ,xxr.p_area_no area_number 
      ,xxr.p_area_name area_name 
      ,xxr.ADVANCE_PAY ADVANCE_PAY 
      ,xxr.DEFERRED_BOOST Postponed_Amount 
      ,xxr.release_num extract_number 
      ,(
       select distinct case 
         when :p_item_code is not null 
          then TOTAL_AMOUNT 
         when :p_item_code is null 
          then (
            (
             select NVL(SUM(TOTAL_AMOUNT), 0) 
             from XXEXTRACT.XXNATGAS_REALSES_LINES 
             where XXEXTRACT.XXNATGAS_REALSES.release_id = XXEXTRACT.XXNATGAS_REALSES_LINES.release_id 
             ) 
            ) 
         else null 
         end 
       from XXEXTRACT.XXNATGAS_REALSES_LINES xxrl 
        ,XXEXTRACT.XXNATGAS_REALSES 
       where 1 = 1 
        and xxrl.release_id = XXEXTRACT.XXNATGAS_REALSES.release_id 
       ) as total 
     from XXEXTRACT.XXNATGAS_REALSES_LINES xxrl 
      ,XXEXTRACT.XXNATGAS_REALSES xxr 
     where 1 = 1 
      and xxrl.release_id = xxr.release_id 
      and xxr.release_date >= NVL(:p_date_from, xxr.release_date) 
      and xxr.release_date <= NVL(:p_date_to, xxr.release_date) 
      and xxr.Contract_num = NVL(:p_cont_num, xxr.Contract_num) 
      and xxr.vendor_id = NVL(:p_ven_id, xxr.vendor_id) 
      and xxr.vendor_site_id = NVL(:p_site_id, xxr.vendor_site_id) 
     ) 
    ) TBL1 
group by TBL1.Contract_number 
    ,TBL1.area_number 
    ,TBL1.area_name 
    ,TBL1.ADVANCE_PAY 
    ,TBL1.Postponed_Amount 
    ,TBL1.extract_number 
    ,TBL1.total; 
相關問題