Sql 按顺序排序时,是否将数值放在底部?
问题是,我不擅长sql查询。当我想在mssql中执行order by时,我想把数值放在底部 我的问题是:Sql 按顺序排序时,是否将数值放在底部?,sql,sql-server,Sql,Sql Server,问题是,我不擅长sql查询。当我想在mssql中执行order by时,我想把数值放在底部 我的问题是: SELECT DISTINCT code,value FROM code_value WHERE code = 'BR' ORDER BY value 我得到的结果是 code value BR 122333 BR 1455577 BR 193 Your Kart BR Junglee BR Kart Info BR Snapdeal BR Your Ka
SELECT DISTINCT code,value
FROM code_value
WHERE code = 'BR'
ORDER BY value
我得到的结果是
code value
BR 122333
BR 1455577
BR 193 Your Kart
BR Junglee
BR Kart Info
BR Snapdeal
BR Your Kart
我希望输出如下
code value
BR Junglee
BR Kart Info
BR Snapdeal
BR Your Kart
BR 122333
BR 1455577
BR 193 Your Kart
是否有任何解决方法可以实现这一点
ORDER BY
case when string_value like '[0-9]%' then 1 else 0 end,string_value
编辑
另一种在特定示例中有效的方法是使用自定义函数
CREATE Function [dbo].[RemoveNonNumericCharacters](@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin
Declare @KeepValues as varchar(50)
Set @KeepValues = '%[^0-9]%'
While PatIndex(@KeepValues, @Temp) > 0
Set @Temp = Stuff(@Temp, PatIndex(@KeepValues, @Temp), 1, '')
Return @Temp
End
然后,在您的上下文中:
SELECT DISTINCT code,value
FROM code_value
WHERE code = 'BR'
order by dbo.RemoveNonNumericCharacters(value), value
请注意,在特定示例的范围之外,此解决方案可能无法按预期工作。示例:如果值在字符串中的某个位置包含数字,但不是以数字值开头。要处理这种情况,必须修改函数。如果指定了select DISTINCT,则ORDER BY items必须出现在选择列表中-他可能应该在另一个执行排序的查询中包装select DISTINCT。包装后,执行了如下操作:选择字符串\u值,itm_项目_属性中的属性_代码,其中组织_id=590,属性_代码='BRAND'和字符串_值,从itm_项目_属性中选择不同的字符串_值,当字符串_值如'[0-9]'时,按大小写排序,然后1或0结束,字符串_value@w0lf这没用。当我触发查询时,我并没有得到唯一的值,也就是说,我得到了多个值。有什么解决办法吗that@Madhivanan谢谢,这很有效。顺便说一句,如果您不介意的话,您能解释一下top 100%吗?当您创建一个包含ORDER BY子句的派生表时,您需要使用top运算符,当您需要所有行时,您需要使用100%。t是派生表的别名
SELECT DISTINCT code,value
FROM code_value
WHERE code = 'BR'
order by dbo.RemoveNonNumericCharacters(value), value