SQLについての質問です。

Writer: admin Type: 消費者問題 Date: 2018-12-14 00:00
SQLについての質問です。KeyCol NumCol FlgCol ResCol --------------------------------------------AAA 0 0 NULLBBB 2 1 NULLCCC 0 0 NULLDDD 3 1 NULLEEE 0 0 NULLFFF 0 0 NULL上記のようなテーブルがあったとしてFlgが立っているレコード以降のResColはResColの値にNumColの値を乗算した値にしたいです。KeyCol NumCol FlgCol ResCol --------------------------------------------AAA 0 0 1BBB 2 1 1CCC 0 0 2DDD 3 1 2EEE 0 0 6FFF 0 0 6 上記のようにしたいです。SQLServer2008です。よろしくお願いいたします。この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。###> Flgが立っているレコード以降のRDBにレコードの順番という概念はありません。> ResColはResColの値にNumColの値を乗算した値「ResCol 」は全部NULLなので乗算してもNULLです。> KeyCol NumCol FlgCol ResCol > --------------------------------------------> AAA 0 0 1> BBB 2 1 1> CCC 0 0 2> DDD 3 1 2> EEE 0 0 6> FFF 0 0 6 どういうロジックでこうなるんでしょう。ナイス0
###この質問は投票によってベストアンサーに選ばれました!###結果表のResColの値がどういう計算をもとに行われているのか、なんとなくわかった気がします。ひょっとして・基本は1である。・FlgColが1だった場合、以降のResColには現在のレコードのNumCol*ResColの値を入れるというルールなのでは。つまりAAA→基本なので1BBB→基本なので1CCC→BBBのNumCol*BBBのResCol=1*2=2DDD→BBBのNumCol*BBBのResCol=1*2=2EEE→DDDのNumCol*DDDのResCol=3*2=6FFF→DDDのNumCol*DDDのResCol=3*2=6ということですか。もしそうなら、少なくともorder条件がわからないと無理だし、プロシージャじゃないと無理でしょうね。ナイス0
###BEGINDECLARE @KeyCol char(3);DECLARE @NumCol int;DECLARE @FlgCol int;DECLARE @ResCol int=1;DECLARE O_CURSOR CURSOR FOR SELECT KeyCol,NumCol,FlgCol FROM tbl ORDER BY KeyCol BEGIN OPEN O_CURSOR; WHILE 0 = 0 BEGIN FETCH O_CURSOR INTO @KeyCol,@NumCol,@FlgCol; IF @@FETCH_STATUS<>0 BREAK; UPDATE tbl SET ResCol=@ResCol WHERE KeyCol=@KeyCol; IF @FlgCol=1 SET @ResCol=@Rescol*@NumCol; END; CLOSE O_CURSOR; DEALLOCATE O_CURSOR; END;END です。ナイス0

 

TAG