与联盟和空值排序SQL Server
问题描述:
我在如何排序下面的联合查询的第二个选择语句中的数据丢失。与联盟和空值排序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] ?
答
您正在排序整个结果,而不仅仅是第二个选择的记录。
您可以使用[标识]字段来记录从第一选择第一:
order by [Identifier], [Error Flag] desc
答
ORDER BY
之后UNION ALL
或其他集合运算符来计算。因此,您应该在这些子选择语句上使用子查询运行ORDER BY
,计算分配增加的行号的伪列,然后按外部语句中伪列的值排序。
+0
@Lucero:没有'ORDER BY'的RDBMS是免费的输出以任意顺序排。 'UNION ALL'合并两组,不过滤掉重复的行,但从技术上讲,不能保证你的子集一个接一个出来。 – Benoit 2011-12-21 15:51:59
对于这种情况,这是一个很好的答案,所以+1。我没有看到'[标识符]'在这里是一个常量。 – Benoit 2011-12-21 15:52:57
O_o好的,这是我以前想过的*以前我曾尝试过,并且出现语法错误,尽管它现在工作完美:)感谢您的帮助! ...我想这只是其中的一个...... – ChandlerPelhams 2011-12-21 15:56:49