こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

複雑な条件下におけるupdate文について

sqlserver(2008R2)についてクエリ文が上手く書けません。
お手数をおかけいたしますが、お分かりになる方はご教授いただければと
思います。

まず、元となるテーブルおよび作成したい完成系は添付ファイルをご確認下さい。

personal_id、personal_name、personal_address、personal_tel、personal_date列を
持つテーブル(personal_table)から 「select * into #table01 personal_table」に
よって一時テーブル#table01を作成し、personal_name・address・telがnullの場合に、
personal_dateが直前時におけるnull以外の値をセットしたいと思っています。
(ただし、セットするのはpersonal_id毎で、最もpersonal_dateが若い者には
必ずpersonal_name・address・telが入っているものとします)。




なお、以下は私が作成したクエリになります。 項目1つずつっと思い、
とりあえずpersonal_nameをpersona_idおよびpersonal_dateを用いて
updateしようと思ったのですが、personal_nameがすべてnullになってしまいました。
---------------------------
select * into #table01 from personal_table

update #table01 set personal_name =
(select personal_name from #table01 A
where #table01.personal_id = A.personal_id AND
#table01.personal_date =
(select MAX(A.personal_date) from #table01 A
where #table01.personal_date > A.personal_date AND
#table01.personal_id = A.personal_id))

SELECT * from #table01
---------------------------



完成系を作成するにあたってどのようなクエリを書けばよろしいのか、
ご教授いただければと思います。

投稿日時 - 2014-01-09 23:32:10

QNo.8422692

すぐに回答ほしいです

質問者が選んだベストアンサー

WHERE条件に「全ての列がNullで無い」を指定したら、personal_idを網羅できますか?
同一idで複数行出てこないなら、そこから取得する。
複数行出るなら、Topキーワード使って一行に絞れば良さそう。

updateのwhere条件には、更新対象列 is Null入れとけば良いし。

投稿日時 - 2014-01-10 00:47:10

お礼

回答ありがとうございました。
結果的に以下のクエリによって目的の動作が出来ました

drop table #table01

select * into #table01 from personal_table

update #table01 set personal_name =
(select personal_name from #table01 A
where #table01.personal_id = A.personal_id AND
A.personal_date =
(select MAX(B.personal_date) from #table01 B
where #table01.personal_date > B.personal_date AND
#table01.personal_id = B.personal_id AND
B.personal_name is not null))
where personal_name is null

SELECT * from #table01

投稿日時 - 2014-01-10 19:18:27

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.1

とりあえずMAXを取得する部分のエイリアスもAであることが気になります。
B等、重複しないエイリアスにしてみては?

投稿日時 - 2014-01-10 00:18:09

お礼

ご回答ありがとうございます。
ベストアンサーが複数出来ればしていたのですが、、、。
しかし、参考にさせていただきました。

投稿日時 - 2014-01-10 19:20:31

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-