2015-09-04 31 views
0

我有一个查询有多个联合声明,其中最后的联合声明结果是从函数派生的。我想知道如何根据函数结果的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

通常只是逗号分隔的名字,我与排序断DESCR列的唯一的问题是,我不能指定它是从最终联合声明vchLastName,我想我可以把它们放入临时表中,然后插入临时表和联合体中,但这也不起作用。 –

回答

0

订购发生在查询执行结束时,至少在选择了所有数据之后。因此,您必须在查询结束时对整个结果集进行排序。 IIRC在T-SQL中没有条件排序。

0

这个一般的想法将工作。你可以工作的细节

select 2 sortfield1 
, whatever aliasName 
from etc 
union all 
select 1 sortfield1 
, yourFunctionResult aliasName 
from etc 
order by sortfield1, aliasName