求高手指教,猎人pk技能排列_全民挂机官方吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:98贴子:
求高手指教,猎人pk技能排列
真对新版本更新了新技能和技能专精,求高手指教,猎人pk技能排列,防御技能排列。后期往往蓝不够用,升级那个技能划算。跪求高手指教
贴吧热议榜
使用签名档&&
保存至快速回贴求一个SQL排序方法,请进,谢谢!
根据以下排序优先权排序
1、所有数据相同如&&&1.11&&&&2.22&&3.33&&&&~&9.99&&&&&&&小数点左边大优先排序
2、小数后两位为0&&&1.00&&&2.00&&3.00&&~9.00&&&&&&&&&&&小数点左边大优先排序
3、小数后两位相同&&0.11&&0.22&&0.33&&~0.99&&&&&&&&&&小数点右边大优先排序
4、三位连数&&&&&&&&&&&&&&&&1.23&&2.34&&3.45&&~&7.89&&&&&&&&数值大优先排序
5&、三位连数&&&&&&&&&&&&&&&&9.87&&8.76&&&7.65&~&3.21&&&&数值大优化先排序&
6、以上无符合的排序&&三位相加&&&0.35&&&=&8&&&&&1.69&=&6&&&&等于&10&为10&&大于10去掉10取余数&&如13&&取&3&&数额大优先
以上排序&&从&&1&~&6&&排序
以下是数据
感谢前辈们的帮助!
你自己做个权值计算的函数用来排序啊。
假定输入参数为&d
返回值(权值)&r&为&int&类型
关键是你自己判定出6种情况,以下为&r&的计算方式
1、r&=&1000&+&d&*&100
2、r&=&2000&+&d
3、r&=&3000&+&ROUND(d,0,1)*100&+&(1-(d-ROUND(d,0,1)))*100
4、r&=&4000&+&d&*&100
5、r&=&5000&+&d&*&100
6、r&=&6000&+&三位相加(d)
引用&1&楼&Tiger_Zhao&的回复:你自己做个权值计算的函数用来排序啊。
假定输入参数为&d
返回值(权值)&r&为&int&类型
关键是你自己判定出6种情况,以下为&r&的计算方式
1、r&=&1000&+&d&*&100
2、r&=&2000&+&d
3、r&=&3000&+&ROUND(d,0,1)*100&+&(1-(d-ROUND(d,0,1)))*100
4、r&=&4000&+&d&*&100
5、r&=&5000&+&d&*&100
6、r&=&6000&+&三位相加(d)
感谢,思路不错!
你看下面是不是你要的?
;WITH&t(num)&AS(
&&SELECT&3.68&UNION&ALL
&&SELECT&2.69&UNION&ALL
&&SELECT&4.36&UNION&ALL
&&SELECT&0.11&UNION&ALL
&&SELECT&6.00&UNION&ALL
&&SELECT&3.33&UNION&ALL
&&SELECT&4.56&UNION&ALL
&&SELECT&3.78&UNION&ALL
&&SELECT&6.54&UNION&ALL
&&SELECT&7.89&UNION&ALL
&&SELECT&2.22&UNION&ALL
&&SELECT&8.56&UNION&ALL
&&SELECT&4.37&UNION&ALL
&&SELECT&3.21&UNION&ALL
&&SELECT&9.96&UNION&ALL
&&SELECT&8.88&UNION&ALL
&&SELECT&4.65&UNION&ALL
&&SELECT&7.89
&&SELECT&*&INTOtd&FROM&t
&&;WITH&a&AS(
&&&&&&SELECT&t.num,STUFF(p.s,1,1,'')&AS&s&,CASE&WHEN&STUFF(p.s,1,1,'')&='0,0,0'&THEN&1&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&WHEN&STUFF(p.s,1,1,'')&LIKE&'0,-[1-9],0'&THEN&2
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&WHEN&STUFF(p.s,1,1,'')&LIKE&'0,[1-9],0'&THEN&3
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&WHEN&STUFF(p.s,1,1,'')&='0,1,1'&THEN&4
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&WHEN&STUFF(p.s,1,1,'')&='0,-1,-1'&THEN&5
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&ELSE&6&END&AS&NumType
&&&&&&FROMtd&AS&t
&&&&&&CROSS&APPLY(
&&&&&&&&&SELECT&','+CONVERT(VARCHAR,
&&&&&&&&&&&&&CONVERT(INT,SUBSTRING(convert(VARCHAR,t.num),sv.number,1))-
&&&&&&&&&&&&&CONVERT(INT,CASE&WHEN&SUBSTRING(convert(VARCHAR,t.num),sv.number-1,1)='.'&THEN&SUBSTRING(convert(VARCHAR,t.num),sv.number-2,1)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&WHEN&sv.number=1&THEN&&SUBSTRING(convert(VARCHAR,t.num),sv.number,1)
&&&&&&&&&&&&&ELSE&&SUBSTRING(convert(VARCHAR,t.num),sv.number-1,1)&END&))
&&&&&&&&&FROM&master.dbo.spt_values&AS&sv&&&&&
&&&&&&&&&WHERE&sv.type='P'&AND&sv.number&BETWEEN&1&AND&LEN(t.num)
&&&&&&&&&&and&SUBSTRING(convert(VARCHAR,t.num),sv.number,1)!='.'
&&&&&&&&&&FOR&XML&PATH('')
&&&&&&)&p(s)
SELECT&*&FROM&a&ORDER&BY&NumType,CASE&WHEN&a.NumType&LIKE&'[1245]'&THEN&a.num&ELSE&-num&END&desc
num s NumType
8.88 0,0,0 1
3.33 0,0,0 1
2.22 0,0,0 1
6.00 0,-6,0 2
0.11 0,1,0 3
7.89 0,1,1 4
7.89 0,1,1 4
4.56 0,1,1 4
6.54 0,-1,-1 5
3.21 0,-1,-1 5
2.69 0,4,3 6
3.68 0,3,2 6
3.78 0,4,1 6
4.36 0,-1,3 6
4.37 0,-1,4 6
4.65 0,2,-1 6
8.56 0,-3,1 6
9.96 0,0,-3 6
你要实现这样的功能,只能用加权
在表加多一个栏位记录权值,最次变更数据都用&加权公式去刷新
漏了一个条件,我写的这个语句还有其他不严谨的地方,考虑可能有重复的num,最好能创建一个唯一的序号,
另外对于最后取和后与10&取余,24和14的值相同,数值可能不仅三个数字等
;WITH&a&AS(
&&&&&&SELECT&t.num,STUFF(p.s,1,1,'')&AS&s&,s.tn
&&&&&&,CASE&WHEN&STUFF(p.s,1,1,'')&='0,0,0'&THEN&1&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&WHEN&STUFF(p.s,1,1,'')&LIKE&'0,-[1-9],0'&THEN&2
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&WHEN&STUFF(p.s,1,1,'')&LIKE&'0,[1-9],0'&THEN&3
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&WHEN&STUFF(p.s,1,1,'')&='0,1,1'&THEN&4
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&WHEN&STUFF(p.s,1,1,'')&='0,-1,-1'&THEN&5
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&ELSE&6&END&AS&NumType
&&&&&&FROMtd&AS&t
&&&&&&CROSS&APPLY(
&&&&&&&&&SELECT&','+CONVERT(VARCHAR,
&&&&&&&&&&&&&CONVERT(INT,SUBSTRING(convert(VARCHAR,t.num),sv.number,1))-
&&&&&&&&&&&&&CONVERT(INT,CASE&WHEN&SUBSTRING(convert(VARCHAR,t.num),sv.number-1,1)='.'&THEN&SUBSTRING(convert(VARCHAR,t.num),sv.number-2,1)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&WHEN&sv.number=1&THEN&&SUBSTRING(convert(VARCHAR,t.num),sv.number,1)
&&&&&&&&&&&&&ELSE&&SUBSTRING(convert(VARCHAR,t.num),sv.number-1,1)&END&))
&&&&&&&&&FROM&master.dbo.spt_values&AS&sv&&&&&
&&&&&&&&&WHERE&sv.type='P'&AND&sv.number&BETWEEN&1&AND&LEN(t.num)
&&&&&&&&&&and&SUBSTRING(convert(VARCHAR,t.num),sv.number,1)!='.'
&&&&&&&&&&FOR&XML&PATH('')
&&&&&&)&p(s)
&&&&&&CROSS&APPLY(
&&&&&&&&SELECT&SUM(tn)&AS&tn&FROM&(
&&&&&&&&&SELECT&CONVERT(INT,SUBSTRING(convert(VARCHAR,t.num),sv.number,1))&AS&tn
&&&&&&&&&FROM&master.dbo.spt_values&AS&sv&&&&&
&&&&&&&&&WHERE&sv.type='P'&AND&sv.number&BETWEEN&1&AND&LEN(t.num)&and&SUBSTRING(convert(VARCHAR,t.num),sv.number,1)!='.'
&&&&&&&&&)&a
SELECT&a.num,a.tn&FROM&a&ORDER&BY&NumType,CASE&WHEN&a.NumType&LIKE&'[1245]'&THEN&a.num&WHEN&a.NumType=3&THEN&&-num&ELSE&a.tn%10&END&desc
用语句太耗性能,这不是数据库处理的事
借用#5测试数据
看你的规律可以用以下算法相对比较高效
;WITH&t(num)&AS(
&&SELECT&3.68&UNION&ALL
&&SELECT&2.69&UNION&ALL
&&SELECT&4.36&UNION&ALL
&&SELECT&0.11&UNION&ALL
&&SELECT&6.00&UNION&ALL
&&SELECT&3.33&UNION&ALL
&&SELECT&4.56&UNION&ALL
&&SELECT&3.78&UNION&ALL
&&SELECT&6.54&UNION&ALL
&&SELECT&7.89&UNION&ALL
&&SELECT&2.22&UNION&ALL
&&SELECT&8.56&UNION&ALL
&&SELECT&4.37&UNION&ALL
&&SELECT&3.21&UNION&ALL
&&SELECT&9.96&UNION&ALL
&&SELECT&8.88&UNION&ALL
&&SELECT&4.65&UNION&ALL
&&SELECT&7.89
&&SELECT&*&FROM&t&ORDER&BY&CASE&WHEN&num*100%111=0&THEN&6000
WHEN&CAST(num&AS&INT)=t.num&THEN&5000
WHEN&num*100%11=0&&THEN&4000&
WHEN&num*100%111=12&THEN&3000&
WHEN&num*100%111=99&THEN&2000&
ELSE&&(CAST(num&AS&INT)+CAST(num*10%10&AS&INT)+CAST(num*100%10&AS&INT))%10*10
END&desc,&num&desc
可自定义每一种排序顺序
WHEN&num*100%111=0&THEN&6000+(10-num)
WHEN&CAST(num&AS&INT)=num&THEN&5000+num
;WITH&t(num)&AS(
&&SELECT&3.68&UNION&ALL
&&SELECT&2.69&UNION&ALL
&&SELECT&4.36&UNION&ALL
&&SELECT&0.11&UNION&ALL
&&SELECT&6.00&UNION&ALL
&&SELECT&3.33&UNION&ALL
&&SELECT&4.56&UNION&ALL
&&SELECT&3.78&UNION&ALL
&&SELECT&6.54&UNION&ALL
&&SELECT&7.89&UNION&ALL
&&SELECT&2.22&UNION&ALL
&&SELECT&8.56&UNION&ALL
&&SELECT&4.37&UNION&ALL
&&SELECT&3.21&UNION&ALL
&&SELECT&9.96&UNION&ALL
&&SELECT&8.88&UNION&ALL
&&SELECT&4.65&UNION&ALL
&&SELECT&7.89
&&SELECT&*&FROM&t&ORDER&BY&CASE&WHEN&num*100%111=0&THEN&6000+(10-num)
WHEN&CAST(num&AS&INT)=num&THEN&5000+num
WHEN&num*100%11=0&&THEN&4000&
WHEN&num*100%111=12&THEN&3000&
WHEN&num*100%111=99&THEN&2000&
ELSE&&(CAST(num&AS&INT)+CAST(num*10%10&AS&INT)+CAST(num*100%10&AS&INT))%10*10
该回复于 08:58:46被管理员删除
好复杂,学习下
来学习学习
根据规则,&把0.00到9.99全部写在一张表中,&放一个排序字段,&手工算好填进去,&也就1000条记录.
这个只能自己写程序处理了。
不是很懂这个额
select&*&from&test&
substr(test1,0,1)&desc,
substr(test1,3,4)&desc,
(case&substr(test1,3,1)&WHEN&substr(test1,4,5)&THEN&substr(test1,3,4)&else&null&end)&
以上只计算了1、2、3排序,4、5、6可以以此类推,逻辑都是一样的,望对你有帮助
看楼上写的太费劲,简单回复下
应该可以写一标量函数,将排序的规则放函数里再调用
即使是一小步也想与你分享