-1

Yの値に更新する必要があるテーブルがありますが、この更新は他のテーブルからのいくつかの結果に基づいており、これを行う方法がわかりません。

基本的に、以下のチェックを完了する必要があります

  1. テーブルから、他のテーブルに正確に19の一致する行があることを更新する必要があることを確認する必要があります
  2. 一致する行で、フィールドの1つがnullではない
  3. 他に2つのテーブルがあり、後者のテーブルにレコードが存在することを確認し、後者の一致するレコードのフィールドの1つに「Y」の値が含まれていないことを確認する必要があります。

これに対する私のアプローチはUNIONを使用することですが、このアプローチが正しいかどうか、またはそれを行うためのはるかに優れた方法があるかどうかを誰かにアドバイスしてもらいたいです。

SELECT '1'
FROM t_A_Outbound
Where NOT HEADER IN (Select HEADER FROM t_B_Outbound)

UNION

SELECT '1'
FROM t_A_Outbound
Where HEADER IN (Select HEADER FROM t_B_Outbound
                 WHERE NOT INCOMPLETE ='Y')

UNION

Select '1'
From t_C_Outbound
Where ValueString = ''

UNION

Select '1'
From t_C_Outbound
WHERE Exists(Select Count(key), HEADER
             From t_C_Outbound IN (SELECT HEADER FROM table_that_needs_updating)
             Group By HEADER
             Having NOT Count(Cast(key as Int)) = 19)

変更する必要があるテーブルのフィールドを更新するためにこの値が戻ってきたかどうかを示すフラグとして1を使用することを考えました。

誰かアドバイスしてもらえますか?

4

1 に答える 1

0

労働組合があなたのために何をしてくれるのか、私にはよくわかりません。

次のような更新ステートメントが必要です。

update table
    set y = . . .
    where header in (Select header
                     From t_C_Outbound
                     Group By HEADER 
                     Having Count(*)= 19 and
                            count(KEY) = count(*)
                    ) and
          header in (select header
                     from other table
                     group by header
                     having sum(case when col = 'Y' then 1 else 0 end) = 0
                    )

等々。より詳細なコードを提供するのに十分なほど明確に問題を説明していません。

于 2012-07-11T21:28:12.280 に答える