用sql实现一个思路 ---在线期求!!!! (续) 100sharpenabc]

发布时间:2016-12-6 20:22:01 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"用sql实现一个思路 ---在线期求!!!! (续) 100sharpenabc]",主要涉及到用sql实现一个思路 ---在线期求!!!! (续) 100sharpenabc]方面的内容,对于用sql实现一个思路 ---在线期求!!!! (续) 100sharpenabc]感兴趣的同学可以参考一下。

declare @M table(A varchar(4),B varchar(4),C varchar(4)) insert into @M select 'a1','b1','c1' insert into @M select 'a1','b1','c2' insert into @M select 'a1','b2','c1' insert into @M select 'a2','b2','c2' insert into @M select 'a2','b2','c3' insert into @M select 'a1','b2','c4' select t.*,(select count(distinct A+'|'+B) from @M where A<t.A or (A=t.A and B<=t.B)) as D from @M t /* A    B    C    D            ---- ---- ---- -----------  a1   b1   c1   1 a1   b1   c2   1 a1   b2   c1   2 a2   b2   c2   3 a2   b2   c3   3 a1   b2   c4   2 */ (li_binftsafe)子陌红尘,谢谢您的精彩解答,我想请问一下,若作为组是三列或三列以上组成的,sql思路该怎么写呢?(比如:表M有A B C E F 5列,我想A B C E作为一个组合,将其分组明细表示出来,该怎么写呢?) 可否了解一下您的sql思路.谢谢!

declare @M table(A varchar(4),B varchar(4),C varchar(4)) insert into @M select 'a1','b1','c1' insert into @M select 'a1','b1','c2' insert into @M select 'a1','b2','c1' insert into @M select 'a2','b2','c2' insert into @M select 'a2','b2','c3' insert into @M select 'a1','b2','c4' select t.*,(select count(distinct binary_checksum(A,B)) from @M where A<t.A or (A=t.A and B<=t.B)) as D from @M t A    B    C    D            ---- ---- ---- -----------  a1   b1   c1   1 a1   b1   c2   1 a1   b2   c1   2 a2   b2   c2   3 a2   b2   c3   3 a1   b2   c4   2 (所影响的行数为 6 行) binary_checksum加入列就行了 在where 加其它条件

/* (li_binftsafe)子陌红尘有个条件拆分了,我把它合并了,看你能不能理解: */ declare @M table(A varchar(4),B varchar(4),C varchar(4)) insert into @M select 'a1','b1','c1' insert into @M select 'a1','b1','c2' insert into @M select 'a1','b2','c1' insert into @M select 'a2','b2','c2' insert into @M select 'a2','b2','c3' insert into @M select 'a1','b2','c4' /* select t.*,(select count(distinct A+'|'+B) from @M where A<t.A or (A=t.A and B<=t.B)) as D from @M t */ select t.*,(select count(distinct A+'|'+B) from @M where A<=t.A and B<=t.B) as D from @M t /* A B C D ---- ---- ---- ----------- a1 b1 c1 1 a1 b1 c2 1 a1 b2 c1 2 a2 b2 c2 3 a2 b2 c3 3 a1 b2 c4 2 */

哦,理解错误,合并也错误,当我没说。

/* 我理解了,但说不出来,只能意会不能言传。 我写个三列组的,重在领会,三列以上组一样扩就是。 */ declare @M table(A varchar(4),B varchar(4),C varchar(4)) insert into @M select 'a1','b1','c1' insert into @M select 'a1','b1','c2' insert into @M select 'a1','b2','c1' insert into @M select 'a2','b2','c2' insert into @M select 'a2','b2','c3' insert into @M select 'a1','b2','c4' --这里用激情兄的BINARY_CHECKSUM吧,简单也科学一些: select t.*,(select count(distinct BINARY_CHECKSUM(A,B,C)) from @M where A<t.A or (A=t.A and (B<t.B or (B=t.B and C<=t.C)))) as D from @M t /* A B C D a1 b1 c1 1 a1 b1 c2 2 a1 b2 c1 3 a2 b2 c2 5 a2 b2 c3 6 a1 b2 c4 4 */ --这样就比较好理解,仅仅用于理解,这样写不可取: select t.*,(select count(distinct BINARY_CHECKSUM(A,B,C)) from @M where A+B+C<=t.A+t.B+t.C) as D from @M t /* A B C D a1 b1 c1 1 a1 b1 c2 2 a1 b2 c1 3 a2 b2 c2 5 a2 b2 c3 6 a1 b2 c4 4 */

谢谢各位的鼎立相助,结贴啦!

版主是不是页面有错?刚才我给上面两位结贴给分然后保存,出现一个参数错误,再次打开发现贴子已经结啦,但分数却显示为零。

没事的,分已经拿到了。

上一篇:SQL备份排程 0fredrickhu]
下一篇:ssis中的变量怎么使用啊?哪位高手可以指教一下我啊??? 50huaxueye229]

相关文章

相关评论