在联盟声明中按功能排序

时间:2015-09-04 15:02:18

标签: sql sql-server function

我有一个具有多个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排序。其他结果排序并不是一件大事,我无法编辑给出结果的函数。

2 个答案:

答案 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