我有一个具有多个union语句的查询,其中最后一个union语句结果是从函数派生的。我想知道如何根据函数结果的vchLastName对结果集进行排序。这是存储过程的基础。
select ID, objtype, Descr=coalesce(v.acctName, x.Descr), x.ihhid
from (
-----select statements----
UNION ALL
SELECT
pn.iPartyID,
'CONTACT',
ISNULL(vchFirstName,'') + ' ' + ISNULL(vchLastName,'') + ' ' +
CASE WHEN vchGoesBy IS NOT NULL THEN '(' + vchGoesBy + ')' ELSE ISNULL(vchGoesBy,'') END,
pn.iHHID
FROM CRM.dbo.cfn_PartyNameSearch(1, 'test') pn
WHERE pn.cPartyType = 'C'
)
x left join tableName v on v.id = x.id
and x.ObjType='ACCOUNT'
我想按联系人的pn.vchLastName排序。其他结果排序并不是一件大事,我无法编辑给出结果的函数。
答案 0 :(得分:0)
在查询执行结束时进行排序,至少在选择了所有数据之后。因此,您必须在查询结束时对整个结果集进行排序。 IIRC在T-SQL中没有条件排序。
答案 1 :(得分:0)
这个一般的想法是有效的。你可以弄清楚细节
select 2 sortfield1
, whatever aliasName
from etc
union all
select 1 sortfield1
, yourFunctionResult aliasName
from etc
order by sortfield1, aliasName