- PR -

【SQLServer】 GROUP BY について

1
投稿者投稿内容
アンクリ
会議室デビュー日: 2008/09/03
投稿数: 11
投稿日時: 2008-12-03 13:11
いつも参考にさせていただいてます。
SQLServer2005にて開発をしています。

"テーブル1"の"項目A"毎の"項目B"最大値のデータの
項目Cを"1"に更新したいのですが、
GROUP BYにて取得する方法とPARTITION BYにて取得する方法とではどちらがいいのでしょうか?
また、どのように違うのでしょうか?
ご存知の方がいらっしゃいましたら、ご教授ください。

<GROUP BYにて取得>
UPDATE テーブル1
SET 項目C = '1'
FROM (SELECT RH.項目A
,RH.項目B
FROM テーブル1 As RH
INNER JOIN (SELECT 項目A
,Max(項目B) AS Max項目B
FROM テーブル1
GROUP BY 項目A) As Wk
ON RH.項目A = Wk.項目A
AND RH.項目B = Wk.Max項目B) As Wk2
WHERE テーブル1.項目A = Wk2.項目A
AND テーブル1.項目B = Wk2.項目B

<PARTITION BYにて取得>
UPDATE テーブル1
SET 項目C = '1'
FROM (SELECT *
FROM (SELECT ROW_NUMBER() OVER(
PARTITION BY 項目A
ORDER BY 項目B DESC) AS RowNo
,項目A
,項目B
FROM テーブル1
) As Wk2
WHERE Wk2.RowNo=1
) As Wk
WHERE テーブル1.項目A = Wk.項目A
AND テーブル1.項目B = Wk.項目B

見にくくなって申し訳ありませんが、よろしくお願いいたします。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-12-03 13:33
実行計画を確認してください。
アンクリ
会議室デビュー日: 2008/09/03
投稿数: 11
投稿日時: 2008-12-03 14:41
King様 よっしー様
 お恥しながら、実行計画というものを知りませんでした。
 ネット等で調べて、実行計画で確認し、解決できそうです。
 アドバイス、アリガトウございました。
1

スキルアップ/キャリアアップ(JOB@IT)