因爲我們現在知道這是SQL Server 2008中,沒有SQL Server 2000作爲原標籤,我們可以這樣做:
SELECT CustomerID, StartDate, TermCount = ROW_NUMBER()
OVER (PARTITION BY CustomerID ORDER BY StartDate)
FROM dbo.table
ORDER BY CustomerID, StartDate;
編輯添加upda基於關於換檔要求的新信息進行查詢。
;WITH t AS
(
SELECT CustomerID, StartDate, CountColumn, TermCount = ROW_NUMBER()
OVER (PARTITION BY CustomerID ORDER BY StartDate)
FROM dbo.table
) UPDATE t SET CountColumn = TermCount;
但是正如我在評論所說,這是不明智的,因爲你需要不斷更新整個表(或至少爲客戶整套行)每當任何行對於客戶的變化。只需基於上述SELECT
查詢創建視圖,而不是嘗試存儲數據。
如果其他用戶遇到同樣的問題並且由於某種原因仍在運行SQL Server 2000,請在此處留下2000解決方法。如果你的桌子很大,這將會非常緩慢。
SELECT CustomerID, StartDate, TermCount = (
SELECT COUNT(*) FROM dbo.table AS t2
WHERE t.CustomerID = t2.CustomerID
AND t.StartDate <= t2.StartDate
)
FROM dbo.table AS t
ORDER BY CustomerID, StartDate;
即時運行SQL服務器2008年 - 抱歉的混淆 – 2012-02-28 17:44:47
@Sarfaraz爲什麼你被標記爲SQL Server 2000?這是現在的兩個問題,因爲你說你在SQL Server 2000上執行額外的工作。 – 2012-02-28 17:50:21
我必須仔細觀察,我以爲我選擇了SQL Server 2008兩次! - – 2012-02-28 17:57:02