2011-12-21 115 views
0

我在如何排序下面的聯合查詢的第二個選擇語句中的數據丟失。與聯盟和空值排序SQL Server

的期望的結果將是:

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

回答

1

您正在排序整個結果,而不僅僅是第二個選擇的記錄。

您可以使用[標識]字段來記錄從第一選擇第一:

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

對於這種情況,這是一個很好的答案,所以+1。我沒有看到'[標識符]'在這裏是一個常量。 – Benoit 2011-12-21 15:52:57

+0

O_o好的,這是我以前想過的*以前我曾嘗試過,並且出現語法錯誤,儘管它現在工作完美:)感謝您的幫助! ...我想這只是其中的一個...... – ChandlerPelhams 2011-12-21 15:56:49

0

ORDER BY之後UNION ALL或其他集合運算符來計算。因此,您應該在這些子選擇語句上使用子查詢運行ORDER BY,計算分配增加的行號的僞列,然後按外部語句中僞列的值排序。

+0

@Lucero:沒有'ORDER BY'的RDBMS是免費的輸出以任意順序排。 'UNION ALL'合併兩組,不過濾掉重複的行,但從技術上講,不能保證你的子集一個接一個出來。 – Benoit 2011-12-21 15:51:59