日期:2014-05-18 浏览次数:20484 次
;with maco as ( select right('0'+ltrim(number),2) as c from master..spt_values where type='p' and number between 1 and 10 ) select * from maco a1,maco a2,maco a3,maco a4,maco a5,maco a6,maco a7 where a1.c<>a2.c and a1.c<>a3.c and a1.c<>a4.c and a1.c<>a5.c and a1.c<>a6.c and a1.c<>a7.c and a2.c<>a3.c and a2.c<>a4.c and a2.c<>a5.c and a2.c<>a6.c and a2.c<>a7.c and a3.c<>a4.c and a3.c<>a5.c and a3.c<>a6.c and a3.c<>a7.c and a4.c<>a5.c and a4.c<>a6.c and a4.c<>a7.c and a5.c<>a6.c and a5.c<>a7.c and a6.c<>a7.c /* c c c c c c c ---- ---- ---- ---- ---- ---- ---- 04 07 06 05 01 03 02 04 08 06 05 01 03 02 04 09 06 05 01 03 02 04 10 06 05 01 03 02 04 06 07 05 01 03 02 04 08 07 05 01 03 02 04 09 07 05 01 03 02 04 10 07 05 01 03 02 ... 07 01 04 06 10 08 09 07 02 04 06 10 08 09 07 03 04 06 10 08 09 07 05 04 06 10 08 09 07 01 05 06 10 08 09 07 02 05 06 10 08 09 07 03 05 06 10 08 09 07 04 05 06 10 08 09 (604800 row(s) affected) */ --运行了8秒钟
------解决方案--------------------
set nocount on ;with maco as ( select right('0'+ltrim(number),2) as c from master..spt_values where type='p' and number between 1 and 10 ) ,t1 as ( select a1.c as c1,a2.c as c2 from maco a1,maco a2 where a1.c<a2.c ),t2 as ( select a1.c1 as c1,a1.c2 as c2,a2.c1 as c3,a2.c2 as c4 from t1 a1,t1 a2 where a1.c1>a2.c1 and a1.c2>a2.c1 and a1.c1>a2.c2 and a1.c2>a2.c2 ),t3 as ( select a1.*,a2.c1 as c5,a2.c2 as c6 from t2 a1,t1 a2 where a1.c1<a2.c1 and a1.c2<a2.c1 and a1.c3<a2.c1 and a1.c4<a2.c1 and a1.c1<a2.c2 and a1.c2<a2.c2 and a1.c3<a2.c2 and a1.c4<a2.c2 ),t4 as ( select a1.*,a2.c as c7 from t3 a1,maco a2 where a1.c1<a2.c and a1.c2<a2.c and a1.c3<a2.c and a1.c4<a2.c and a1.c5<a2.c and a1.c6<a2.c ) select c3,c4,c1,c2,c5,c6,c7 from t4 order by 1,2,3,4,5,6,7