2017-07-18 82 views
1

我有這個下面的查詢是讓我一個小的結果集SQL更新表圈

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) 

結果集是這樣的:

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 
................................................ 

然後我有一個讓我一個這樣的其它查詢我需要添加到SALES列的編號。例如,下面的查詢,我用固定祿,並計劃拿出數:

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

假設上面這個查詢得到我10,我需要把它加入到排隊的結果上述設定的2 ,使其

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

我的目標是使之顯得有些動態的,一個簡單的方法做的全過程,所以對於每個LOC和計劃的組合,我會堵塞這些值轉換成第二選擇,以獲取正確的號碼添加到銷售,然後更新#CurrentPrd。將新號碼寫入新的臨時表也是一種選擇。

我希望我能夠解釋我想要做什麼。任何幫助,將不勝感激。

謝謝。

+1

我不確定爲什麼你需要的東西,如果動態這是完全靜態的。 ..例如你不能只在SELECT語句中使用子查詢,如SELECT LOC,PLAN,FiscalYear,FiscalPeriod,SALES +(SELECT Sales FROM #TOT WHERE LOC = PrdAg.LOC AND PLAN = PrdAg.PLAN) - (SELECT SUM )FROM #CurrentPrd WHERE Store = PrdAg.LOC AND PLAN = PrdAg.PLAN)FROM #CurrentPrd AS PrdAg ...'? – ZLK

回答

1

沒有任何實際的測試數據,這是很難肯定地說,但我認爲像下面應該爲你工作...

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

這是完美的。謝謝! –

+0

很高興爲您提供幫助。 :) –