Sql-Server
使用另一個表中的最大值和最小值進行 T-SQL 更新
我對 SQL 查詢沒有太多經驗,我正在嘗試從我的錯誤中學習和理解。我有兩張桌子:
CREATE TABLE #TempTest (Id INT, Number INT) CREATE TABLE #TempTest2 (Id INT, MaxNo INT, MinNo INT) INSERT INTO #TempTest VALUES (1,4) INSERT INTO #TempTest VALUES (1,6) INSERT INTO #TempTest VALUES (1,9) INSERT INTO #TempTest VALUES (1,7) INSERT INTO #TempTest VALUES (1,3) INSERT INTO #TempTest VALUES (1,1) INSERT INTO #TempTest VALUES (1,5) INSERT INTO #TempTest2 VALUES (1,0,10)
我正在嘗試
MaxNo
使用第一個表中小於 8 的最大值和MinNo
大於 1 的最小值來更新列:UPDATE t2 SET MaxNo = IIF(t1.Number>t2.MaxNo AND t1.Number<8,t1.Number, t2.MaxNo), MinNo = IIF(t1.Number<t2.MinNo AND t1.Number>1,t1.Number, t2.MinNo) FROM #TempTest2 t2 JOIN #TempTest t1 ON t2.Id=t1.Id
但它用值 4 更新了兩列。我也嘗試過使用
BEGIN Transaction ... COMMIT
圍繞更新,但結果是一樣的。
我究竟做錯了什麼?正確更新第二個表的最佳方法是什麼?
For
MinNo with the minimum bigger than 1
= 將忽略(標記為 null)所有小於或等於 1 的記錄。CASE WHEN Number <=1 THEN NULL ELSE Number END
For
max number smaller than 8
= 將忽略(標記為 null)所有大於或等於 8 的記錄。CASE WHEN Number >= 8 THEN NULL ELSE Number END
查詢將如下所示:
UPDATE t2 SET MaxNo = t1.MaxNo, MinNo = t1.MinNo FROM #TempTest2 as t2 INNER JOIN ( SELECT id, MinNo = MIN(CASE WHEN Number <=1 THEN NULL ELSE Number END), MaxNo = MAX(CASE WHEN Number >= 8 THEN NULL ELSE Number END) FROM #TempTest GROUP BY id )as t1 ON t2.Id = t1.Id; SELECT * FROM #TempTest2;
輸出: