使用Union和null值SQL Server排序

时间:2011-12-21 15:43:00

标签: sql sql-server union

我无法在以下联合查询的第二个select语句中对数据进行排序。

期望的结果将是:

C null null null null null
I xxxx xxxx xxxx 1    xxxx
I xxxx xxxx xxxx 1    xxxx
I xxxx xxxx xxxx null xxxx
I xxxx xxxx xxxx null xxxx

以下是代码:

select 'C' [Identifier]
,null [Acct/Invoice #]
,null [Check #/Pay Amount]
,null [Check Amount/Error Code]
,null [Error Flag]
,null [Trx Account #]
union all
select 'I' [Indentifer]
,final_inv_number [Invoice #]
,final_final_pay_amount [Pay Amount]
,final_trans_code [Error Code]
,case when final_is_reconciled = 1 then 1 end [Error Flag]
,case when final_parse_type = 'ERROR CREATED' or final_parse_type = 'PREV PD'
    then final_account_number else null end [Trx Account #]
from #final
where final_net_pay_amount <> 0
--order by [Error Flag] ?

2 个答案:

答案 0 :(得分:1)

您正在对整个结果进行排序,而不仅仅是第二次选择的记录。

您可以使用[标识符]字段保留第一个选择的记录:

order by [Identifier], [Error Flag] desc

答案 1 :(得分:0)

ORDER BYUNION ALL或其他集合运算符之后计算。因此,您应该对这些子选择语句使用子选择run ORDER BY,计算一个指定递增行号的伪列,然后按外部语句中伪列的值排序。