2017-07-18 8 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列に追加する必要があります。たとえば、以下のクエリは、私は、固定されたLOCを使用して番号を思い付くことを計画:

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

その後、私は上記の結果セットの2行目にそれを追加する必要がある、のは、このクエリは、上記の私の10を取得しますと仮定しましょうそれ

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

作る私の目標は、各LOCとPLANの組み合わせのために、私は正しい番号を取得するために、第2の選択にそれらの値をプラグしまうので、それはややダイナミック作り、簡単な方法で全体のプロセスを行うことですSALESに追加し、#CurrentPrdを更新します。新しい番号を新しい一時表に書き込むこともオプションです。

私は何をしようとしているのか説明できたと思います。どんな助けもありがとう。

ありがとうございました。任意の実際の試験データなし

+1

それは完全に静的だ場合は、動的な何かを必要とする理由私はわかりませんよ。 ..例えば'SELECT LOC、PLAN、FiscalYear、FiscalPeriod、SALES +(SELECT Sales From #TOT WHERE LOC = PrdAg.LOCとPLAN = PrdAg.PLAN)のようなSELECT文でサブクエリを使うことはできません。 )FROM#CurrentPrd Where Store = PrdAg.LOC AND PLAN = PrdAg.PLAN)#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

喜んで助けてください。 :) –