2012-02-28 51 views
-2

有一個表如下: 客戶ID,MDN,計劃開始日期,結束日期,期限,期限計數,短信的使用,語音使用添加期限計數基於我多少記錄和日期

有可能是記錄,其中客戶ID顯示出來一次或更多 -

如果有客戶ID只有一個實例,我想長期計數爲1 -

如果客戶ID顯示了不止一次,我要按開始日期排序所有記錄 - 並在開始日期後按每條記錄遞增期限計數 -

如果客戶ID是34,並且開始日期和1/1/2012和2012/2/2

第一個應該被設置爲1,第二個應該被設置爲2 -

SAS

回答

3

因爲我們現在知道這是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; 
+0

即時運行SQL服務器2008年 - 抱歉的混淆 – 2012-02-28 17:44:47

+0

@Sarfaraz爲什麼你被標記爲SQL Server 2000?這是現在的兩個問題,因爲你說你在SQL Server 2000上執行額外的工作。 – 2012-02-28 17:50:21

+0

我必須仔細觀察,我以爲我選擇了SQL Server 2008兩次! - – 2012-02-28 17:57:02