2014-04-22 45 views
0

的任務是說我有4000(或N)CUTOMER表客戶ID,我需要將它們分配給4人有每個他們的照顧1000(或N/4)客戶ID, 我試過分區,但它給我結果錯了5:在每個記錄。MS-訪問:分配記錄至4人,每個有相同數量的記錄

SELECT CUSTOMER_ID, Partition (CUSTOMER_ID, 1, 4, (SELECT ROUND(Sum(B.C)/4,0) AS 
Employee_ID FROM (SELECT CUSTOMER_ID, Count(CUSTOMER_ID) AS C FROM CUSTOMER GROUP BY 
CUSTOMER_NAME) AS B)/4) 
FROM CUSTOMER 
GROUP BY CUSTOMER_ID; 
+1

代替行號分區。 –

+0

@MarcB我試過,但這個時候,它只是顯示「您試圖EXCUTE不包括指定表達式‘分區(ID,1,4,5000)’AS一部分AGGREATE功能的查詢」「SELECT CUSTOMER_ID,分區( [ROWID],1,4,5000)作爲僱員ID來自CUSTOMER GROUP BY CUSTOMER_ID;' – user2108184

回答

1

這是一種方法。對於測試數據

CUSTOMER_ID 
----------- 
      1 
      2 
      4 
      7 
      8 
     11 
     13 
     14 
     15 
... 

查詢

SELECT c1.CUSTOMER_ID, COUNT(*) AS RankIndex 
FROM CUSTOMER c1 INNER JOIN CUSTOMER c2 ON c1.CUSTOMER_ID >= c2.CUSTOMER_ID 
GROUP BY c1.CUSTOMER_ID 

會產生

CUSTOMER_ID RankIndex 
----------- --------- 
      1   1 
      2   2 
      4   3 
      7   4 
      8   5 
     11   6 
     13   7 
     14   8 
     15   9 
... 

所以,如果我們做一些模4算術上COUNT(*)並將其命名爲[的Employee_ID],像這樣

SELECT c1.CUSTOMER_ID, ((COUNT(*) - 1) Mod 4) AS Employee_ID 
FROM CUSTOMER c1 INNER JOIN CUSTOMER c2 ON c1.CUSTOMER_ID >= c2.CUSTOMER_ID 
GROUP BY c1.CUSTOMER_ID 

我們得到

CUSTOMER_ID Employee_ID 
----------- ----------- 
      1   0 
      2   1 
      4   2 
      7   3 
      8   0 
     11   1 
     13   2 
     14   3 
     15   0 
... 
+0

嗨戈德,我試過這個查詢,但訪問一直運行它的最後一個小時還沒有完成到現在 – user2108184