2011-12-21 18 views
0

次のユニオンクエリの2番目のSELECT文でデータを並べ替える方法が失われています。Order By By Union値とNULL値SQL Server

所望の結果は次のようになります。

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] ? 

答えて

1

2番目の選択からのレコードだけでなく、結果全体をソートしています。

あなたは最初の選択最初からレコードを維持するために、[識別子]フィールドを使用することができます。

order by [Identifier], [Error Flag] desc 
+0

これは良い答えですので、+1してください。私は '[Identifier]'がここでは定数であることを見ていませんでした。 – Benoit

+0

O_oこれは私が思っていたものです*以前は試してみましたが、構文エラーが出ていましたが、今は完璧に動作しています:)助けてくれてありがとう! ...私はそれが当時のひとつだと思います... – ChandlerPelhams

0

ORDER BYUNION ALLまたは他のセットのオペレータの後に計算される:

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 

ここでは、コードがあります。したがって、これらの副選択文には副選択文ORDER BYを使用し、増加する行番号を割り当てる疑似列を計算してから、外部文の疑似列の値で順序を決定する必要があります。

+0

@Lucero:RDBMSは、任意の順序で行を出力に無料でBY' ORDER 'なし。 'UNION ALL'は2つの集合をマージし、重複行を除外しませんが、技術的には部分集合が次々に出てくるという保証はありません。 – Benoit