2016-09-28 59 views
0

需要幫助的數&創建分離行基於組如果跌破拆分計數基於組由

表1(部分順序有唯一的ID數據)

AID Batchid Status 
1 PWB 0 
1 PWB 0 
1 PWB 0 
1 PWB 0 
2 PWB 0 
2 PWB 0 
2 PWB 0 


CREATE TABLE #Tmp(
AID VARCHAR(5), 
Tnt FLOAT, 
BatchId VARCHAR(20), 
status INT) 
INSERT INTO #Tmp 
SELECT distinct AID, count(*),'PWB',0 FROM table1 WITH(NOLOCK) 
GROUP BY AID 
SELECT * FROM #Tmp 
DROP TABLE #Tmp 

以上數超過1000個,例如查詢輸出

AID Tnt BatchId status 
0 20 PWB 0 
1 1  PWB 0 
42 5010 PWB 0 
11 2  PWB 0 

但我想&第一列將是唯一的分裂行

AID Tnt BatchId status 
0 20 PWB 0 
1 1  PWB 0 
42 1000 PWB 0 
42 1000 PWB 0 
42 1000 PWB 0 
42 1000 PWB 0 
42 1000 PWB 0 
42 10 PWB 0 
11 2  PWB 0 
+0

提供一些來自table1的示例數據,以便更清楚地理解該需求。 – Susang

+0

從表1中我已經通過AID組獲得了全部數 – Logesh

+0

什麼是1000以及它來自哪裏? – Serg

回答

0

CROSS APPLY tally table。我使用sys.all_objects作爲理貨。注意Tnt必須是int,沒有理由聲明計數(*)爲float

CREATE TABLE #Tmp(
    AID VARCHAR(5), 
    Tnt Int, 
    BatchId VARCHAR(20), 
    status INT); 

-- your sample data 
INSERT INTO #Tmp 
VALUES 
(0 ,20 ,'PWB',0) 
,(1 ,1 ,'PWB',0) 
,(42 ,5010 ,'PWB',0) 
,(11 ,2 ,'PWB',0); 

--parameter 
DECLARE @limit int = 1000; 
SELECT AID, CASE WHEN rn*@limit <= Tnt THEN @limit ELSE Tnt%@limit END as Tnt, BatchId, status 
FROM #Tmp t1 
CROSS APPLY (
    SELECT TOP(Tnt/@limit + CASE Tnt%@limit WHEN 0 THEN 0 ELSE 1 END) 
     rn = ROW_NUMBER() OVER(ORDER BY tnt) 
    FROM sys.all_objects 
) x; 

DROP TABLE #tmp; 
+0

謝謝。計數(*)用於計算表1的總數 – Logesh

+0

如果它可以工作,您可以接受答案,這是謝謝:)。否則就答案的問題發表評論。 – Serg

+0

只是想知道:你在'Tnt'中使用'Int',而原始帖子建議'浮動'。不知道這對OP是否重要,但在這種情況下,您的解決方案將不再有效。特別是'%'(模)必須重寫,因爲這不適用於'float'。 – Ralph