2016-08-02 11 views
0
declare @week1S DATE = '07/01/2016'; 
declare @week1E DATE = '07/07/2016'; 

WITH A as (
SELECT COUNT(ARB_accomplished) as ARB_accomplished_CNT 
FROM arbimport 
WHERE Requested_date between @week1S and @week1E AND arb_accomplished LIKE 'Y' 
GROUP BY dispatch_group_name 
) 
Update ArbitrageResponse 
Set arb_count1 = (SELECT ARB_accomplished_CNT FROM A) 

別のテーブルの応答の数に基づいて1つのテーブルの列を更新しようとしています。私はdispgroupsをグループ化しようとしています。インポートテーブルが大量であるため、選択した日付範囲にフィルタリングしようとしています。私はこれをたくさん動かさなければならないので、変数を保持するのはクールですが、必要はありません。複数の値を返すサブクエリ...許可されていません

私の応答テーブルは毎週レスポンスを記録したいので、私はこのテーブルに追加されたカラムが必要なので、私はアップデートをしました。

は、私はエラーを取得しています

「サブクエリ以上1つの値。これは、サブクエリが=、!=、<は、< =、>、> =またはサブクエリは次のように使用されたときに、次の時に許可されていない返さ表現。"

サブクエリで呼び出されている変数と変数が関係しているかどうかはわかりません。サブクエリが多くの異なる行の集計結果を返すことがわかります。これを行うより良い方法はありますか?

+0

サンプル・データ、所望の結果でしょうあなたがしようとしていることを伝えるのに本当に役立ちます。エラーメッセージは非常に明確です。あなたがしたいことはありません。 –

+0

あなたのクエリ 'SELECT ARB_accomplished_CNT FROM A'は、dispatch_group_nameでグループ化してから複数の値を返します。 niketshah90のように、dispatch_group_name – niketshah90

+0

に基づいてarb_count1を更新している場合は、UPDATEステートメントでjoinを使用することをお勧めします。UPDATE AR SET arb_count1 = A.ARB_accomplished_CNT FROM ArbitrageResponse AR JOIN A ON A.dispatch_group_name = AR.dispatch_group_name'を作成し、CTEにdispatch_group_nameを含めるように変更してください... – ZLK

答えて

0

このような何か試してください:あなたのテーブルの構造を知らなくても

set @countaccomplished = SELECT COUNT(ARB_accomplished) as ARB_accomplished_CNT 
FROM arbimport 
WHERE Requested_date between @week1S and @week1E AND arb_accomplished LIKE 'Y' 
GROUP BY dispatch_group_name WHERE DISPATCH_GROUP_NAME = SOMETHING 

Update ArbitrageResponse 
Set arb_count1 = @countaccomplished 

OR

WITH A as (
SELECT COUNT(ARB_accomplished) as ARB_accomplished_CNT, dispatch_group_name 
FROM arbimport 
WHERE Requested_date between @week1S and @week1E AND arb_accomplished LIKE 'Y' 
GROUP BY dispatch_group_name 
) 
Update b 
Set b.arb_count1 = a.ARB_accomplished_CNT 
FROM ArbitrageResponse b where a.dispatch_group_name= b.dispatch_group_name 
0

を、これは単なる推測です:

WITH A as (
     SELECT dispatch_group_name, COUNT(ARB_accomplished) as ARB_accomplished_CNT 
     FROM arbimport 
     WHERE Requested_date between @week1S and @week1E AND arb_accomplished LIKE 'Y' 
     GROUP BY dispatch_group_name 
    ) 
UPDATE ar 
    SET arb_count1 = a.ARB_accomplished_CNT 
    FROM ArbitrageResponse ar JOIN 
     A 
     ON ar.dispatch_group_name = a.dispatch_group_name 
関連する問題