在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)))
但他们都没有工作。现在我甚至不确定是否可以这样做,如果有的话,任何人都可以告诉我我做错了什么?
答案 0 :(得分:0)
我认为您希望将ID
作为参数传递给您。然后你的函数将为每一行返回不同的值,它将在order by
中使用。