SQL自动筛选结果

SQL自动筛选结果,sql,sql-server,Sql,Sql Server,这就是我试图执行的查询 select top(50) plr_fullnm as Player, concat('[b]',runs,'[/b]') as Runs, balls as Balls, frs as Frs, sxs as Sxs, round(sr,2) as StrikeRt, team as Team, opnt as Opposition, ground as Ground, concat ('Match # ',mat_no) as Scoreboard from Inn

这就是我试图执行的查询

select top(50)
plr_fullnm as Player,
concat('[b]',runs,'[/b]') as Runs,
balls as Balls,
frs as Frs,
sxs as Sxs,
round(sr,2) as StrikeRt,
team as Team,
opnt as Opposition,
ground as Ground,
concat ('Match # ',mat_no) as Scoreboard
from InningWiseBatRecords
order by runs desc, sr asc
这些是结果数据的前4行

Player          Runs        Balls   Frs Sxs StrikeRt    Team        Opposition  Ground      Scoreboard
Shai Hope       [b]98[/b]   137     10  0   71.53       WEST INDIES INDIA       Banglore    Match # 16
Kieron Pollard  [b]97[/b]   85      9   1   114.12      WEST INDIES PAKISTAN    Jamaica     Match # 14
Rohit Sharma    [b]97[/b]   83      9   3   116.87      INDIA       PAKISTAN    Mumbai      Match # 19
Virat Kohli     [b]95[/b]   68      12  4   139.71      INDIA       PAKISTAN    Mumbai      Match # 19
但基本上还有7个条目的运行次数大于100,但我不知道为什么这些行会被丢弃

等等,当我把最后一条语句从代码改成这个时,它就被解决了

order by InningWiseBatRecords.runs desc, InningWiseBatRecords.sr asc

为什么不按表名调用列名会导致问题?

ORDER by子句中的表达式
runs
绑定到SELECT列表中的表达式
runs
,该表达式是
varchar
,因此被排序为字符串。因此,
“[b]98[/b]”
“[b]100[/b]”

如果要按表列而不是SELECT表达式排序,请在ORDER BY中限定表达式,例如:

select top(50)
plr_fullnm as Player,
concat('[b]',runs,'[/b]') as Runs,
balls as Balls,
frs as Frs,
sxs as Sxs,
round(sr,2) as StrikeRt,
team as Team,
opnt as Opposition,
ground as Ground,
concat ('Match # ',mat_no) as Scoreboard
from InningWiseBatRecords r
order by r.runs desc, sr asc

也许是因为你只进了前50名?尝试将其增加到57或更高。运行的数据类型是什么?字符串和数字数据类型的顺序不同<代码>'97'大于
'100'
。如果需要对值进行数字排序,请使用数字数据类型。