2014-09-12 25 views
0

我想計算表中的行數。我想它一個任意值動態地分配給記錄,以便我能集團在Visual Studio中值2010計數SSMS中的行

所以,我的數據集將是這樣的:

╔═══════╦════════════╗ 
║ BinID ║ CountOffID ║ 
╠═══════╬════════════╣ 
║ A1 ║   1 ║ 
║ A2 ║   2 ║ 
║ A3 ║   3 ║ 
║ A4 ║   1 ║ 
║ A5 ║   2 ║ 
║ A6 ║   3 ║ 
║ A7 ║   1 ║ 
╚═══════╩════════════╝ 

任何幫助將非常感激。謝謝。

此外,一個簡單的例子時,不會因爲3上班不整除10

+0

您可能需要更具體地瞭解您的意思*動態分配任意值* – 2014-09-12 20:14:59

+0

我只希望數字從1開始並轉到3.除了我的分組外,它沒有任何價值。我希望它始終以第一條記錄開始並轉到結果集中的最後一條記錄。 – Jake 2014-09-12 20:16:44

回答

1

與NTILE這裏的問題是,它會partition the numbers in sequence

如果您真的想要以計數方式分配號碼,您可以執行以下操作。

With CTE as (

SELECT 
    BinID, 
    ROW_NUMBER() OVER (ORDER BY BINID) rn 
FROM 
    Table1) 
SELECT 
    BinId, 
    CASE WHEN rn % 3 = 0 then 3 
     ELSE rn % 3 
    END as CountOffID 
From cte 

Demo

這就產生了一個ROWNUMBER,然後使用modulo生成的數目。

如果你可以確保沒有任何缺口,你可以直接從BinID中刪除,但是你需要解析並轉換它看起來很脆弱。

+0

謝謝康拉德,我試着拉馬克的解決方案無濟於事,並開始尋找其他選擇。我發現你工作的很好。我在開始時遇到了一些小錯誤,但迅速解決了這些錯誤。感謝您的幫助,非常感謝。 – Jake 2014-09-15 13:10:25

3
SELECT BinID, 
     CountOffID = NTILE(3) OVER(ORDER BY BinID) 
FROM YourTable 
+0

我想我不明白這裏的語法。我可以要求解釋嗎? – Jake 2014-09-12 20:24:19

+0

@Jake Sure。 'CountOffID ='部分只是爲列指定別名的另一種方式,與'AS CountOffID'相同。 [NTILE](http://msdn.microsoft.com/en-us/library/ms175126.aspx)是SQL Server 2005中可用的許多排名函數之一+ – Lamak 2014-09-12 20:27:24