2017-03-27 2 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) 

      ) 

、ここでは、グループであります

これらは完全なクエリですので、助けてください

+1

おそらく、サンプルデータ、望ましい結果、およびあなたがしたいことの説明で別の質問をする必要があります。 –

+2

パーツだけでなく、すべてのクエリを表示します。 Btwでは、DISTINCTとGROUP BYの両方が同じですが、息子のうちの1つだけが必要です。 – dnoeth

+0

ユーザーが特定のパラメータを入力した場合は合計金額を取得したい(合計金額は列名)。ユーザーが任意のパラメータを入力した場合は合計金額を取得する – Tarek

答えて

0

私はあなたの質問をよく理解できませんでした。あなたは次回のために投稿を改善することができます。

答えとして、あなたはselect asサブクエリを使って選択したstatmentと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; 
関連する問題