2016-05-20 4 views
0

Ich habe eine vorhandene Abfrage, die eine Spalte fasst:In Summe ersten Abfrage der zweiten Abfrage in SQL zu summieren

SELECT 
    fcst.eow_date - 21 AS eow_date, 
    fcst.item, 
    ril.source_wh, 
    SUM (fcst.forecast_sales) AS forecast_sales 
FROM RMS10.item_forecast fcst, RMS10.repl_item_loc ril, RMS10.wh w 
WHERE ril.item = fcst.item 
    AND fcst.loc = ril.location 
    AND ril.source_wh = w.wh 
    AND w.forecast_wh_ind = 'Y' 
    AND ril.loc_type = 'S' 
    AND fcst.item IN (SELECT UNIQUE item 
         FROM RMS10.repl_item_loc ril, RMS10.wh w 
         WHERE  ril.location = W.WH 
           AND W.FORECAST_WH_IND = 'Y' 
           AND RIL.REPL_METHOD IN ('TI', 
                 'M', 
                 'C', 
                 'D')) 
GROUP BY fcst.item, eow_date, source_wh 
ORDER BY 3, 2, 1;  

das Beispiel Ausgang wird sein:

4/30/2016 9953639 159384 184.5015 
5/7/2016 9953639 159384 188.5844 
5/14/2016 9953639 159384 186.102` 

und ich habe eine andere Abfrage von denen würde Ich mag die Prognose insgesamt wie folgt zusammenfassen:

SELECT fcst.eow_date -21 AS eow_data, fcst.item, axrf.source_whse, SUM(fcst.forecast_sales) AS forecast_sales 
FROM item_forecast fcst, aip.aafes_pack_item_xref axrf, repl_item_loc rpl 
WHERE fcst.item = axrf.item 
    AND fcst.item = rpl.item 
    AND fcst.loc = rpl.location 
    AND rpl.source_wh = axrf.loc 
    AND rpl.loc_type = 'S' 
GROUP BY fcst.eow_date, fcst.item, axrf.source_whse 
ORDER BY 3,2,1; 

`

Der Ausgang für die obige Abfrage wäre:

4/30/2016 9953639 159384 58.1433 
5/7/2016 9953639 159384 56.5777 
5/14/2016 9953639 159384 57.5736 

ich die die beiden Ausgänge für, wenn die ersten 3 Spalten wie dies eine neue insgesamt prognostizierten Umsatz entsprechen und umfassen hinzufügen möchten:

4/30/2016 9953639 159384 242.6448 
5/7/2016 9953639 159384 245.1621 
5/14/2016 9953639 159384 243.6756 

Wenn die Zeilen in der 2./3. Spalte nicht übereinstimmen, möchte ich immer noch ihre Summe sehen. Irgendeine Idee, wie ich das mit SQL machen kann?

Danke!

+1

was meinst du mit 'Ich möchte auch alle Ausgaben, die nicht übereinstimmen, auch angezeigt. '? – EagleRainbow

+0

Sorry, ich meine für Zeilen, wo der Artikel/Ort (2./3. Spalte) nicht übereinstimmen, würde ich immer noch gerne das Ergebnis sehen. – Adil

+2

Sie sollten wirklich auf "JOIN" -Syntax nachlesen und aufhören, mehrere Tabellen in Ihre 'FROM'-Klausel zu setzen. –

Antwort

0

Ich würde versuchen, Ihre beiden Abfragen UNION und dann aggregieren sie oben. Also, so etwas wie diese

select eow_date, item, sum(forecast_sales) as forecast_sales 
from 
(
    (your-first-query) 
    UNION ALL 
    (your-second-query) 
) as union_table 
group by eow_date, item 

In Kombination mit Ihren Aussagen über dies ergibt die folgende lange aufstanden SQL-Anweisung:

SELECT eow_date, item, sum(forecast_sales) AS forecast_sales 
FROM 
(
    ( 
    SELECT 
    fcst.eow_date - 21 AS eow_date, 
    fcst.item, 
    ril.source_wh, 
    SUM (fcst.forecast_sales) AS forecast_sales 
    FROM RMS10.item_forecast fcst, RMS10.repl_item_loc ril, RMS10.wh w 
    WHERE ril.item = fcst.item 
     AND fcst.loc = ril.location 
     AND ril.source_wh = w.wh 
     AND w.forecast_wh_ind = 'Y' 
     AND ril.loc_type = 'S' 
     AND fcst.item IN (SELECT UNIQUE item 
        FROM RMS10.repl_item_loc ril, RMS10.wh w 
        WHERE  ril.location = W.WH 
          AND W.FORECAST_WH_IND = 'Y' 
          AND RIL.REPL_METHOD IN ('TI', 
                'M', 
                'C', 
                'D')) 
    GROUP BY fcst.item, eow_date, source_wh 
    ORDER BY 3, 2, 1 
    ) 
    UNION ALL 
    (
     SELECT fcst.eow_date -21 AS eow_data, fcst.item, axrf.source_whse, SUM(fcst.forecast_sales) AS forecast_sales 
     FROM item_forecast fcst, aip.aafes_pack_item_xref axrf, repl_item_loc rpl 
     WHERE fcst.item = axrf.item 
     AND fcst.item = rpl.item 
     AND fcst.loc = rpl.location 
     AND rpl.source_wh = axrf.loc 
     AND rpl.loc_type = 'S' 
     GROUP BY fcst.eow_date, fcst.item, axrf.source_whse 
     ORDER BY 3,2,1 
    ) 
) AS union_table 
GROUP BY eow_date, item 

Um die Komplexität dieser SQL-Anweisung zu verringern (und damit die Wartbarkeit zu verbessern) Es könnte hilfreich sein, in diesem Fall SQL-Ansichten zu verwenden.

Verwandte Themen