2014-04-22 41 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