0
在下面的代碼中,我的目標是讀取有關另一個表中的人的某些信息,然後執行計算,然後將結果插入另一個表中。在將值插入第二個表之前,需要掃描整個表格執行相同的計算。當我運行的代碼,在點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,計算某種等級。你認爲你需要循環來做到這一點(你不需要),當你遇到麻煩時,你會詢問循環,而不是*實際*問題。你想要計算什麼? Post示例源數據和結果數據 –
BTW SQL Server有許多排名函數,如ROW_NUMBER,RANK,DENSE_RANK,NTILE等。您可以使用'OVER'子句計算正在運行的聚合。您可以* JOIN *兩個表來獲得匹配的行。您可以在SUM中使用'CASE'子句將文本數據轉換爲數字,但加入查詢表會更容易。無論您想要做什麼,都不需要循環和所有這些變量 –