0
以下のコードでは、私の目標は、別のテーブルの人に関する特定の情報を読み取り、計算を実行して別のテーブルに結果を挿入することです。テーブル全体を走査するこの必要性は、第2のテーブルに値を挿入する前に同じ計算を実行する。私は、コードを実行すると、ポイント22にスコアテーブルに挿入されますがさえ、様々なranks.belowがあると思った私のコードです:TSQL計算に論理エラーがあるようです
DECLARE @PID NCHAR(4), @rank nvarchar(20),@JoinDate datetime,@Amt int,
@LengthOfService int,@RowNum int
select @PID=Max(No_) from dbo.Person
select @RowNum=COUNT(*)FROM dbo.Person
select @JoinDate=[Employment Date] from dbo.Person where [email protected]
select @rank=Grade from dbo.Personwhere where [email protected]
While @RowNum>0
BEGIN
IF(@rank='Point01' OR @rank='Point02')
BEGIN
SET @Amt=10
END
ELSE if(@rank='Point03')
BEGIN
set @Amt=5
END
ELSE IF(@rank='Point04' OR @rank='Point05')
BEGIN
set @Amt=22
END
INSERT INTO dbo.Scores(EmpID,total)
VALUES(@PID,@Amt)
set @RowNum = @RowNum - 1
END
なぜあなたは 'INSERT SELECT'文を書かないのですか?なぜループで、なぜ 'triggers'タグを使うのですか?あなたはどちらでもない –
これは[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のケースです。何らかのランクを計算する問題Xがあります。あなたはそれをするためにループが必要だと思っています(あなたはそうしません)。そして、あなたが困ったときにループについて質問します。実際の問題ではありません。あなたは何を計算しようとしていますか?例のソースと結果のデータ –
BTW SQL Serverには、ROW_NUMBER、RANK、DENSE_RANK、NTILEなどのランキング機能が多数あります。実行中の集計を計算するには、OVER句を使用できます。 * 2つのテーブルをジョインして、一致する行を取得することができます。ルックアップテーブルと結合する方が簡単ですが、テキストデータを数値に変換するには、 'SUM'の中で' CASE'節を使用することができます。あなたがしたいことは何でも、ループとそのすべての変数を必要としません –