向大神求助EXL里的SQL问题

lin45263773 2018-02-13 05:56:03
想通过EXL 里的MICROSOFT QUERY 这个调用外部数据的SQL 编写一个12个英文字母的全排列 就像12个座位,12个人,随机排列出多少种不同的组合。求教大神应该怎么弄?工作要用到,挺着急的,先谢谢各位大神了!!!!

做出的效果就像
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 12 11
1 2 3 4 5 6 7 8 9 12 10 11

等等
...全文
916 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin45263773 2018-02-15
  • 打赏
  • 举报
回复
引用 16 楼 yenange 的回复:
[quote=引用 15 楼 lin45263773 的回复:] 5个领导,不能归为一类,因为部门不同,科长和科员可以按类别分,所以是12345 666 7777这个样子
还是不太理解你的意思, 可能我的理解能力有限。 我唯一能判断的是:每个人的值班不可能安排太多变化的东西, 每个人顶多几十不超过上百种可能,再多人家觉得复杂没有什么规律可能就不接受你的做法了。 建议你再发一个贴, 把业务方面说详细一点, 让论坛大神一起来解决。[/quote] 因为单位出现了一些问题,所以领导研究决定要这么做,来保证一些事情,我会根据你的建议,重新开一个帖子来向大家求助,还请你多帮忙,今天是三十,我也要出门,明天再开新帖子吧,祝你新年快乐!!!!
lin45263773 2018-02-14
  • 打赏
  • 举报
回复
引用 11 楼 yenange 的回复:
SELECT 12*11*10*9*8*7*6*5*4*2*1 --159667200 数据量好大, EXCEL是放不下了, 建议你分段做吧
嗯,这个数据量确实很大,你的建议也很好,谢谢,分段做,可能就会放下。这样的话,我准备做12张表, 第一张 12列,第一列全是1 然后后面11列23456789101112全排列 第二张 12列,第一列全是2 然后后面11列13456789101112全排列 以此类推 第十二张 12列,第一列全是12 然后后面11列1234567891011全排列 不过这样编写代码,好像更复杂了!!!!头要炸了55555555
吉普赛的歌 2018-02-14
  • 打赏
  • 举报
回复
SELECT 12*11*10*9*8*7*6*5*4*2*1 --159667200 数据量好大, EXCEL是放不下了, 建议你分段做吧
吉普赛的歌 2018-02-14
  • 打赏
  • 举报
回复
引用 9 楼 lin45263773 的回复:
没关系,谢谢你这么辛苦帮我想12个数字的,请问这个12数字的应该怎么改动才能正常运行?给你添麻烦了!
DECLARE @t TABLE (n INT)
INSERT INTO @t VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)

SELECT * FROM 
	@t AS t1
	,@t AS t2
	,@t AS t3
	,@t AS t4
	,@t AS t5
	,@t AS t6
	,@t AS t7
	,@t AS t8
	,@t AS t9
	,@t AS t10
	,@t AS t11
	,@t AS t12
WHERE 12 = (
           SELECT COUNT(DISTINCT n)
           FROM   (VALUES (t1.n), (t2.n), (t3.n), (t4.n)
					,(t5.n), (t6.n), (t7.n), (t8.n)
					,(t9.n), (t10.n), (t11.n), (t12.n)) X(n)
       )
ORDER BY 1,2,3,4,5,6,7,8,9,10,11,12
这是按邹老师想法改出来的, 但运行10分钟还没出结果, 后面再想下有没有效率更高的办法
lin45263773 2018-02-14
  • 打赏
  • 举报
回复
引用 8 楼 yenange 的回复:
[quote=引用 7 楼 yenange 的回复:]
DECLARE @t TABLE (n INT)
INSERT INTO @t VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)

SELECT * FROM 
	@t AS t1
	,@t AS t2
	,@t AS t3
	,@t AS t4
	,@t AS t5
	,@t AS t6
	,@t AS t7
	,@t AS t8
	,@t AS t9
	,@t AS t10
	,@t AS t11
	,@t AS t12
WHERE t1.n+t2.n+t3.n
	 +t4.n+t5.n+t6.n
	 +t7.n+t8.n+t9.n
	 +t10.n+t11.n+t12.n = (1+12)*12/2
ORDER BY 1,2,3,4,5,6,7,8,9,10,11,12
写出来了, 不过运行时间很长, 晚一点贴结果。
这个有问题, sorry[/quote] 没关系,谢谢你这么辛苦帮我想12个数字的,请问这个12数字的应该怎么改动才能正常运行?给你添麻烦了!
吉普赛的歌 2018-02-14
  • 打赏
  • 举报
回复
引用 7 楼 yenange 的回复:
DECLARE @t TABLE (n INT)
INSERT INTO @t VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)

SELECT * FROM 
	@t AS t1
	,@t AS t2
	,@t AS t3
	,@t AS t4
	,@t AS t5
	,@t AS t6
	,@t AS t7
	,@t AS t8
	,@t AS t9
	,@t AS t10
	,@t AS t11
	,@t AS t12
WHERE t1.n+t2.n+t3.n
	 +t4.n+t5.n+t6.n
	 +t7.n+t8.n+t9.n
	 +t10.n+t11.n+t12.n = (1+12)*12/2
ORDER BY 1,2,3,4,5,6,7,8,9,10,11,12
写出来了, 不过运行时间很长, 晚一点贴结果。
这个有问题, sorry
吉普赛的歌 2018-02-14
  • 打赏
  • 举报
回复
DECLARE @t TABLE (n INT)
INSERT INTO @t VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)

SELECT * FROM 
	@t AS t1
	,@t AS t2
	,@t AS t3
	,@t AS t4
	,@t AS t5
	,@t AS t6
	,@t AS t7
	,@t AS t8
	,@t AS t9
	,@t AS t10
	,@t AS t11
	,@t AS t12
WHERE t1.n+t2.n+t3.n
	 +t4.n+t5.n+t6.n
	 +t7.n+t8.n+t9.n
	 +t10.n+t11.n+t12.n = (1+12)*12/2
ORDER BY 1,2,3,4,5,6,7,8,9,10,11,12
写出来了, 不过运行时间很长, 晚一点贴结果。
zjcxc 2018-02-14
  • 打赏
  • 举报
回复
那就是一个纯组合的,既然能用 SQL ,那就简单了,有几个数字,就按照下面的规律添加就行了
DECLARE @t TABLE (n INT)
INSERT INTO @t VALUES (1),(2),(3),(4)
 
SELECT * 
FROM @t a, @t b, @t c, @t d
WHERE 4 =(	SELECT COUNT(DISTINCT n) FROM(VALUES
				(a.n), (b.n), (c.n), (d.n)
			) X(n))
ORDER BY 1, 2, 3, 4
吉普赛的歌 2018-02-14
  • 打赏
  • 举报
回复
引用 15 楼 lin45263773 的回复:
5个领导,不能归为一类,因为部门不同,科长和科员可以按类别分,所以是12345 666 7777这个样子
还是不太理解你的意思, 可能我的理解能力有限。 我唯一能判断的是:每个人的值班不可能安排太多变化的东西, 每个人顶多几十不超过上百种可能,再多人家觉得复杂没有什么规律可能就不接受你的做法了。 建议你再发一个贴, 把业务方面说详细一点, 让论坛大神一起来解决。
lin45263773 2018-02-14
  • 打赏
  • 举报
回复
5个领导,不能归为一类,因为部门不同,科长和科员可以按类别分,所以是12345 666 7777这个样子
lin45263773 2018-02-14
  • 打赏
  • 举报
回复
引用 13 楼 yenange 的回复:
还是不行。 excel 最多 一百多万, 这里有1亿多, 你分成十二个, 每个表都还有 一千多万。 你先确定你的需求再说吧。
谢谢你为了我的事,费了这么多心,很是感激,我是想做一个监控监察的安排表一共12个监控头,5个领导,3个科长,4个科员,每一个小时需要轮换一次监控画面,我需要把这个表做出来,如果按职位类别分的话,是不是数据能少一些? 如果 用 1 2 3 4 5 6 6 6 7 7 7 7 这些数字,进行全排列,再分成12表,EXL是否够用呢?如果够用应该怎么做呢?
吉普赛的歌 2018-02-14
  • 打赏
  • 举报
回复
引用 12 楼 lin45263773 的回复:
[quote=引用 11 楼 yenange 的回复:] SELECT 12*11*10*9*8*7*6*5*4*2*1 --159667200 数据量好大, EXCEL是放不下了, 建议你分段做吧
嗯,这个数据量确实很大,你的建议也很好,谢谢,分段做,可能就会放下。这样的话,我准备做12张表, 第一张 12列,第一列全是1 然后后面11列23456789101112全排列 第二张 12列,第一列全是2 然后后面11列13456789101112全排列 以此类推 第十二张 12列,第一列全是12 然后后面11列1234567891011全排列 不过这样编写代码,好像更复杂了!!!!头要炸了55555555 [/quote] 还是不行。 excel 最多 一百多万, 这里有1亿多, 你分成十二个, 每个表都还有 一千多万。 你先确定你的需求再说吧。
lin45263773 2018-02-13
  • 打赏
  • 举报
回复
引用 3 楼 yenange 的回复:
DECLARE @t TABLE (n INT)
INSERT INTO @t VALUES (1),(2),(3)

SELECT * FROM @t AS a 
	INNER JOIN @t AS b ON a.n!=b.n 
	INNER JOIN @t AS c ON a.n!=c.n AND b.n!=c.n
ORDER BY a.n,b.n,c.n
/*
n	n	n
1	2	3
1	3	2
2	1	3
2	3	1
3	1	2
3	2	1
*/
谢谢你的回复,你的回复对我很有启发,能不能麻烦你在给我发一个1 2 3 4 的编写方式,我根据123 和 1234 来推理出123456789101112!我是个菜鸟,只能尽我自己所能去学习,给你添麻烦了!!!谢谢
吉普赛的歌 2018-02-13
  • 打赏
  • 举报
回复
产生出来的结果, 直接复制粘贴到 EXCEL 就好, 不必纠结EXCEL这个东西。
吉普赛的歌 2018-02-13
  • 打赏
  • 举报
回复
DECLARE @t TABLE (n INT)
INSERT INTO @t VALUES (1),(2),(3)

SELECT * FROM @t AS a 
	INNER JOIN @t AS b ON a.n!=b.n 
	INNER JOIN @t AS c ON a.n!=c.n AND b.n!=c.n
ORDER BY a.n,b.n,c.n
/*
n	n	n
1	2	3
1	3	2
2	1	3
2	3	1
3	1	2
3	2	1
*/
lin45263773 2018-02-13
  • 打赏
  • 举报
回复
[quote=引用 1 楼 zjcxc 的回复:] Excel? Excel 里面的 Microsoft Query 只是个查询客户端,它要连接到某种灵气库才能做查询 就你这个例子而言,在 Excel 中很容易通过公式实现 先在 Excel 地 A 列放12个数字,每行一个,从1到12 然后在 B 列的第一行设置公式,=MOD(A1,12)+1 最后鼠标移动到 B1 单元格(设置了公式的那个)的右下角,鼠标变成 十 字箭头的时候按住向右拖动,拖出 11 列,这样第一行就弄好了 然后选中 B1 到 L1,将鼠标移到 L1 右下角,鼠标变成 十 字箭头的时候按住向下拖动到第 12 行,这样其余的数字也就好了 首先谢谢你的回复,但是我想做的是全排列,也就是在行里,数字是唯一的,但是在列里,数字不应该是唯一的! 按你的方法出来的结果是1 2 3 4 5 6 7 8 9 10 11 12 2 3 4 5 6 7 8 9 10 11 12 1 等等 但是 1 3 2 4 5 6 7 8 9 10 11 12 这些是没有的,可能是我表述的不够清楚! 如果按三个数字表示 结果应该是 123 132 213 231 312 321是这样的!!!不过还是要谢谢你!
zjcxc 2018-02-13
  • 打赏
  • 举报
回复
Excel? Excel 里面的 Microsoft Query 只是个查询客户端,它要连接到某种灵气库才能做查询 就你这个例子而言,在 Excel 中很容易通过公式实现 先在 Excel 地 A 列放12个数字,每行一个,从1到12 然后在 B 列的第一行设置公式,=MOD(A1,12)+1 最后鼠标移动到 B1 单元格(设置了公式的那个)的右下角,鼠标变成 十 字箭头的时候按住向右拖动,拖出 11 列,这样第一行就弄好了 然后选中 B1 到 L1,将鼠标移到 L1 右下角,鼠标变成 十 字箭头的时候按住向下拖动到第 12 行,这样其余的数字也就好了

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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