2017-07-18 6 views
1

Ich habe dies folgende Abfrage, die mir ein kleines Ergebnis wird gesetztSQL Update Tabelle Schleife

SELECT 
    LOC, PLAN, FiscalYear, FiscalPeriod, SALES 
FROM 
    #CurrentPrd PrdAg 
WHERE 
    NOT EXISTS (SELECT AGE.ECPLAN 
       FROM ECPG_BAK AGE 
       WHERE PrdAg.LOC = AGE.STORE 
        AND PrdAg.PLAN = AGE.PLAN 
        AND PrdAg.FiscalYear = AGE.FiscalYear 
        AND PrdAg.FiscalPeriod = AGE.FiscalPeriod) 

Die Ergebnismenge wie folgt aussieht:

LOC PLAN FiscalYear FiscalPeriod SALES 
--------------------------------------------------- 
5 6  2031  5    -0.206232 
12 6  2031  5    5.243052 
12 8  2020  4    1.699716 
12 8  2020  5    1.699716 
14 6  2031  5    0.299972 
19 6  2031  5    1.549812 
19 8  2020  5    20.114116 
33 6  2031  5    2.159767 
33 8  2020  5    23.796883 
34 6  2031  5    1.142360 
34 8  2020  5    9.348583 
................................................ 

Dann habe ich diese andere Frage, die mir bekommt Nummer, die ich zur Spalte SALES hinzufügen muss. Zum Beispiel verwendet die Abfrage unten, I fixed loc und planen mit einer Zahl zu kommen:

select 
    (select SALES 
    from #TOT 
    where loc = 12 and PLAN = 6) - (select sum(sales) 
            from #CurrentPrd 
            where store = 12 and PLAN = 6) as Comp 

Nehmen wir an, diese Abfrage über 10 bekommt mir, dann muss ich es hinzufügen 2 des Ergebnisses oben auf der Leitung , so dass es

LOC PLAN FiscalYear FiscalPeriod SALES 
---------------------------------------------- 
12 6  2031  5    15.243052 

Mein Ziel ist es etwas dynamischer und machen den gesamten Prozess auf einfache Art und Weise zu machen, so dass für jeden LOC und PLAN Kombination, würde ich diese Werte in die zweite Auswahl stecken die richtige Nummer abrufen Um zu SALES hinzuzufügen, aktualisieren Sie #CurrentPrd. Das Schreiben der neuen Nummer in eine neue temporäre Tabelle ist ebenfalls möglich.

Ich hoffe, ich konnte erklären, was ich versuche zu tun. Jede Hilfe wäre willkommen.

Danke.

+1

Ich bin mir nicht sicher, warum Sie etwas dynamischer brauchen, wenn es vollständig statisch ist. .. z.B Können Sie nicht einfach eine Unterabfrage in Ihrer SELECT-Anweisung verwenden, wie SELECT LOC, PLAN, FiscalYear, FiscalPeriod, SALES + (SELECT Sales VON #TOT WHERE LOC = PrdAg.LOC UND PLAN = PrdAg.PLAN) - (SELECT SUM (Sales) FROM #CurrentPrd WHERE Geschäft = PrdAg.LOC UND PLAN = PrdAg.PLAN) FROM #CurrentPrd AS PrdAg ... '? – ZLK

Antwort

1

Ohne tatsächliche Testdaten, ist es schwer, sicher zu sagen, aber ich denke, so etwas wie das für Sie sollten folgende ... arbeiten

SELECT 
    PrdAg.LOC, 
    PrdAg.[PLAN], 
    PrdAg.FiscalYear, 
    PrdAg.FiscalPeriod, 
    SALES = PrdAg.SALES + (tx.SALES - cpx.SALES) 
FROM 
    #CurrentPrd PrdAg 
    CROSS APPLY (SELECT TOP 1 T.SALES FROM #TOT T WHERE PrdAg.LOC = T.LOC AND PrdAg.[PLAN] = t.[PLAN]) tx 
    CROSS APPLY (SELECT SALES = SUM(CP.SALES) FROM #CurrentPrd CP WHERE PrdAg.LOC = CP.LOC AND PrdAg.[PLAN] = CP.[PLAN]) cpx 
WHERE 
    NOT EXISTS (
      SELECT 1 
      FROM 
       ECPG_BAK AGE 
      WHERE 
       PrdAg.LOC = AGE.STORE 
       AND PrdAg.[PLAN] = AGE.[PLAN] 
       AND PrdAg.FiscalYear = AGE.FiscalYear 
       AND PrdAg.FiscalPeriod = AGE.FiscalPeriod 
      ); 
+0

Das ist perfekt. Vielen Dank! –

+0

Gut zu helfen. :) –