UPDATE Houses
SET lStatus = U.codesum
FROM Houses H
JOIN (SELECT ref, SUM(code) AS codesum
FROM Users
GROUP BY ref) AS U ON U.ref = H.ref
上面的代碼獲取每個房屋(房屋表)的所有用戶。爲所有用戶彙總代碼列(用戶表)。最後更新房屋表的lstatus列中的結果。我的問題是: 我需要重寫不是總結代碼列的查詢。相反,我想創建案例陳述。例如:TSQL while循環
tempvar = 0 //local variable might be required
For each user {
If code == 1 then tempvar += 5
else if code == 2 then tempvar += 10
etc
tempvar = 0;
}
一旦我們通過每個房屋的所有用戶,我們現在可以設置lStatus = tempvar。 然後tempvar應該重置爲0爲下一個房子。
99%,如果你認爲在SQL Server中「循環」,你正在想錯誤的方式,並有一個更好,更高效,基於集合的答案。我不會像永遠/永遠不會說任何事情,但大多數情況下這是非常可靠的。 – 2013-02-11 16:31:31
99.9%的時間有一種方法來獲得你想要的,而不循環或使用遊標。我知道人們在堆積着你,但這是一個扼殺萌芽的壞習慣。以下是使用UDF解決小型企業問題的另一個示例:http://granadacoder.wordpress.com/2008/07/24/cursors-setbased-and-scalar-udf/ – granadaCoder 2013-02-11 18:13:40