2017-03-27 3 views
-3

die Abfrage funktioniert gut, aber wenn iam Hinzufügen Gruppe es gibt mir [Fehler] ORA-01427 hier die HauptabfrageWie verwende ich Groß- und Kleinschreibung mit?

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, 

und hier ist der Fall-Anweisung lautet:

(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 

und hier der von einem Teil:

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) 

      ) 

und hier ist die Gruppe von:

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

diese ist die vollständige Abfrage bitte so dass jede Hilfe

+1

Vielleicht sollten Sie eine andere Frage mit Beispieldaten, gewünschten Ergebnissen und einer Erklärung dessen, was Sie tun möchten, stellen. –

+2

Zeigen Sie die vollständige Abfrage, nicht nur Teile. Btw, beide "DISTINCT" und "GROUP BY" machen das gleiche, Sohn nur einer von ihnen wird benötigt. – dnoeth

+0

Ich möchte den Gesamtbetrag erhalten, wenn der Benutzer einen bestimmten Parameter eingegeben hat (Gesamtbetrag ist ein Spaltenname) und die Summe des Gesamtbetrags erhalten, wenn der Benutzer dosent irgendeinen Parameter eingibt – Tarek

Antwort

0

Für sicher, dass ich nicht sehr gut Ihre Frage verstehen konnte. Sie könnten Ihren Beitrag für das nächste Mal verbessern.

Als Antwort, ich denke, Sie sollten Ihre ausgewählte Anweisung und Gruppe, indem Sie Ihre Auswahl als Unterabfrage kapseln. Es ist nicht der beste Ansatz, aber es kann gut funktionieren.

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; 
Verwandte Themen