求SQL语句,实现如下分配数据结果

HuoLarry 2014-11-25 03:17:25
源表T:

ID,ACC_NBR
1,1301111111
2,1311111111
3,1321111111
4,1331111111
5,1341111111
6,1351111111

源表G:

GROUP
A
B
C
D

需要得到的结果表: T1
ID,ACC_NBR,GROUP
1,1301111111,A
2,1311111111,A
3,1321111111,B
4,1331111111,B
5,1341111111,C
6,1351111111,C

需求描述:

这个需求是为了平均分配一份数据,实例中是有6行唯一的数据,实现2个号码分配一个组(这里希望是可以调整的,比如说10个号码一组),一定要连续,比如A组必须是1,2,不能是1,2,7。一共有ABC3组,实际情况会有7行数据,那么就自动分配到下一个组D。ABC组是提前定义好的一张表,可能会有300个组。

...全文
306 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
HuoLarry 2014-11-25
  • 打赏
  • 举报
回复
引用 6 楼 ky_min 的回复:
呃,你说要预留可以改组员数的地方~~ 所以我就把声明并设定值留给你了 以下是组员数为2 你试下吧,有啥问题贴上来
DECLARE @GROUPCONT int
 SET @GROUPCONT=2
SELECT 
T2.*,T1.AGENT_ID
FROM 
(SELECT ROW_NUM()OVER(ORDER BY AGENT_ID)RN,AGENT_ID FROM G) T1
JOIN ##t_2 T2 ON T1.RN = (T2.ID-1)/@GROUPCONT+1
感谢,已经成功了。改天再研究这个东西。
还在加载中灬 2014-11-25
  • 打赏
  • 举报
回复
呃,你说要预留可以改组员数的地方~~ 所以我就把声明并设定值留给你了 以下是组员数为2 你试下吧,有啥问题贴上来
DECLARE @GROUPCONT int
 SET @GROUPCONT=2
SELECT 
T2.*,T1.AGENT_ID
FROM 
(SELECT ROW_NUM()OVER(ORDER BY AGENT_ID)RN,AGENT_ID FROM G) T1
JOIN ##t_2 T2 ON T1.RN = (T2.ID-1)/@GROUPCONT+1
HuoLarry 2014-11-25
  • 打赏
  • 举报
回复
引用 4 楼 19850713 的回复:
[quote=引用 2 楼 19850713 的回复:] [quote=引用 1 楼 ky_min 的回复:] 根据@GROUPCOUNT改变组员数,如果T表的ID不是按顺序,再编号一下处理。
SELECT
	T2.*,T1.[GROUP]
FROM
	(SELECT ROW_NUMBER()OVER(ORDER BY[GROUP])RN,[GROUP]FROM G)T1
	JOIN T T2 ON T1.RN=(T2.ID-1)/@GROUPCOUNT+1
T表是按照1,2,3的顺序下来的。[/quote] 提示:必须声明标量变量"@GROUPCOUNT"[/quote] 我增加了变量声明,

DECLARE @GROUPCONT int

SELECT 
T2.*,T1.AGENT_ID
FROM 
(SELECT ROW_NUM()OVER(ORDER BY AGENT_ID)RN,AGENT_ID FROM G) T1
JOIN ##t_2 T2 ON T1.RN = (T2.ID-1)/@GROUPCONT+1
我更改了一些字段,因为GROUP是加关键字,我更改为实际情况的AGENT_ID,也用了真实的字段。 但是执行后,只是把表头跑出来,没有我要的结果。
HuoLarry 2014-11-25
  • 打赏
  • 举报
回复
引用 2 楼 19850713 的回复:
[quote=引用 1 楼 ky_min 的回复:] 根据@GROUPCOUNT改变组员数,如果T表的ID不是按顺序,再编号一下处理。
SELECT
	T2.*,T1.[GROUP]
FROM
	(SELECT ROW_NUMBER()OVER(ORDER BY[GROUP])RN,[GROUP]FROM G)T1
	JOIN T T2 ON T1.RN=(T2.ID-1)/@GROUPCOUNT+1
T表是按照1,2,3的顺序下来的。[/quote] 提示:必须声明标量变量"@GROUPCOUNT"
还在加载中灬 2014-11-25
  • 打赏
  • 举报
回复
那你就试下,有什么问题贴上来
HuoLarry 2014-11-25
  • 打赏
  • 举报
回复
引用 1 楼 ky_min 的回复:
根据@GROUPCOUNT改变组员数,如果T表的ID不是按顺序,再编号一下处理。
SELECT
	T2.*,T1.[GROUP]
FROM
	(SELECT ROW_NUMBER()OVER(ORDER BY[GROUP])RN,[GROUP]FROM G)T1
	JOIN T T2 ON T1.RN=(T2.ID-1)/@GROUPCOUNT+1
T表是按照1,2,3的顺序下来的。
还在加载中灬 2014-11-25
  • 打赏
  • 举报
回复
根据@GROUPCOUNT改变组员数,如果T表的ID不是按顺序,再编号一下处理。
SELECT
	T2.*,T1.[GROUP]
FROM
	(SELECT ROW_NUMBER()OVER(ORDER BY[GROUP])RN,[GROUP]FROM G)T1
	JOIN T T2 ON T1.RN=(T2.ID-1)/@GROUPCOUNT+1

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧