2016-09-26 14 views
-1

caseステートメントでwhileループとif条件(関数呼び出し付き)を実装しようとしています。基本的には、私はこれをやろうとしています:whileステートメントcaseステートメントt-sql

begin 
    case 
     when (condition1 and condition 2 and ncolumn_num between 6 and 9) 
      then 
      while @i < 10 
      begin 
       if(hsip.Is_numeric(hsip.getTempResponseById(@cregion, @cState_code, @nFY, @nReport_id, @nsection_id, @nquestion_number, @ndisplay_number, @nquestion_number, @nquestion_part_number, @suser_id, @nrow_number, i, @suser_id))) 

@nrunningtotal = @nrunningtotal + hsip.getTempResponseById(@cRegion, @cState_code, @nFY, @nReport_id, @nsection_id, @nquestion_number, @ndisplay_number, @nquestion_number, 
    @nquestion_part_number, @suser_id, @nrow_number, @ncolumn_number, @suser_id) 

     end if 
end 

case文のwhileループとif条件を実装できますか?私のビジネスロジックでは、6から9までの列を合計し、最後の合計をcol:10とする必要があります。

私は2つの関数を持っています:gettempresponsebyid:応答文字列を返し、番号に変換する関数はisnumericです。

誰かがこれを行うより良い方法を提案してください。このエラーが発生します:

INCORRECT SYNTAX NEAR IF AND INCORRECT SYNTAX NEAR RUNNINGTOTAL.

+0

ddl、入力データ、予想出力を提供できますか?ループ中にdootを実行する必要があるように見える –

+2

これは 'CASE' *の式*のためではありません。サンプルデータと必要な結果を共有してください。あなたは問題についてすべて間違っているように思えます(読んでください:[XYの問題とは何ですか?](http://meta.stackexchange.com/a/66378)) – Siyual

+0

あなたはあなたと同じようにデータ処理を考えています従来のプログラミング言語 - 繰り返し。 SQLには異なるパラダイムがあり、主な用途は反復処理を含まない。あなたはTSQL拡張で反復することができますが、それはSQLに二次的です。あなたは、これらの日のほとんどの時間ウィンドウ関数を使用して、合計を実行します。 – ajeh

答えて

3

Q:case文内にwhileループとif条件を実装できますか?

A:いいえCASEはT-SQL ステートメントではありません。 の式です。投稿のコードで

https://msdn.microsoft.com/en-us/library/ms181765.aspx

、一つの大きな構文の問題はここを開始:

BEGIN CASE ... 
    ^

は条件付きT-SQLでの流れを制御するためにIF/ELSE文を使用します。スタートのために

https://msdn.microsoft.com/en-us/library/ms182717.aspx

IF文でCASE表現の不正な使用を交換してください。

BEGIN 
    IF (condition1 AND condition2 AND ncolumn_num between 6 and 9) 
    BEGIN 
     ... 
    END; 
    END IF; 
END; 

しかし、たとえその変更と、それはあなたが達成しようとしている何か解決しようとしている問題はまだ明確ではありません。あなたがしようとしていることをやる方がはるかに良い方法かもしれませんが、あなたがしようとしていることを推測するだけです。

+0

このプロシージャの予想される出力は、runningtotal = runningtotal + numericof(response_string)となるrunningtotalです。レスポンス文字列は、 "gettempresponsebyid"の出力です。関数。したがって、ユーザーが誤って数値以外の値を入力した場合は、0が返され、実行中の合計が計算されます。次に、この実行中の出力は、total_correct列(col 6〜9 = colno。10)に格納する必要があります。 私は立ち往生しており、どのアプローチに従うべきかわからない。これを回避する方法をお勧めしますか?私はあなたが好きなら擬似コードを投稿することができます。ありがとう – user3147594

関連する問題