SQL Server按函数值排序

时间:2015-08-28 09:33:01

标签: sql sql-server sql-server-2012 sql-order-by

在order by子句中,我们可以指定一个函数吗?它适用于内置函数,如ORDER BY NEWID(),因为NEWID()是一个函数。但是我希望通过自定义函数指定排序。

ALTER Function [dbo].[Func_RetentionPriorityStatus]
(
    @Priority varchar(3)
)
Returns varchar(50)
As
Begin

declare @ID int
set @ID = (select rop.ID from dbo.RetentionOutboundPriority rop where rop.Archived = 0);
declare @ColName varchar(50)



select 
  @ColName = Col.value('local-name(.)', 'varchar(max)')
from (select *
      from dbo.RetentionOutboundPriority
      where ID = @ID
      for xml path(''), type) as T(XMLCol)
  cross apply 
    T.XMLCol.nodes('*') as n(Col) 
where Col.value('.', 'varchar(10)') = @Priority

    RETURN @ColName

End

所以查询就像这样

select * from dbo.RetentionTele rt
inner join dbo.RetentionTeleNotInterested rtni
on rt.ID = rtni.RetentionTeleID
order by

这就是问题所在,我指定了

order by [dbo].[Func_RetentionPriorityStatus](@currentPriority)

order by (select [dbo].[Func_RetentionPriorityStatus](@currentPriority))

order by + (select [dbo].[Func_RetentionPriorityStatus](@currentPriority))

order by convert(varchar, (select dbo.[Func_RetentionPriorityStatus](1)))

order by + convert(varchar, (select dbo.[Func_RetentionPriorityStatus](1)))

但他们都没有工作。现在我甚至不确定是否可以这样做,如果有的话,任何人都可以告诉我我做错了什么?

1 个答案:

答案 0 :(得分:0)

我认为您希望将ID作为参数传递给您。然后你的函数将为每一行返回不同的值,它将在order by中使用。