2013-06-20 49 views
1

我真的卡在UNION ALL加入的順序,下面是塞納里奧聯盟都在DB2 SQL查詢更新拳頭表

,如果我來逐個運行此查詢我得到如下結果

1) Select salary as result from employee 
    where empno = '111628548' and seqno = 4 
    order by seqno Desc 

result 
------ 
$7000 
$3000 

2) Select descofemp as result from empdetail 
    where empno = '111628548' and seqno = 4 
    order by seqno Desc 

result 
------ 
very good employee 
good employee 

上述兩導致字符串,所以列是相同的類型。 但是當我上面的兩個查詢與工會加入我得到像

With s1 as (Select salary from employee 
    where empno = '111628548' and seqno = 4 
    order by seqno Desc), 

s2 as (Select descofemp from empdetail 
    where empno = '111628548' and seqno = 4 
    order by seqno Desc 
) 
select * from s1              
Union ALL               
select * from s2 

Result 
------ 
$3000 
$7000 
very good employee 
good employee 

您可以在這裏看到工資的順序已經改變,我想verious的事情,但爲什麼順序改變我不能夠理解在UNION ALL中,是否有人知道或面對這個問題,如果是的話,你可以分享一些關於如何解決問題的信息。

預先感謝您。

問候 蒙娜麗莎

回答

3

聯盟確實保證結果的排序。但是,您可以在訂購信息中添加並使用:

With s1 as (Select salary as col, row_number() over (order by seqno desc) as seqnum 
    from employee 
    where empno = '111628548' and seqno = 4 
), 
s2 as (Select descofemp as col , row_number() over (order by seqno desc) as seqnum 
    from empdetail 
    where empno = '111628548' and seqno = 4 
) 
select col 
from (select * from s1              
     Union ALL               
     select * from s2 
    ) t 
order by seqnum 
+0

謝謝..會給你試試..並讓你知道... – SmartDev

+0

@monamona。 。 。需要注意的是,'by by'不穩定,因爲你正在用'seqno'命令,它的值總是爲'4'。你可能應該使用另一個在兩個查詢所選擇的行上不同的字段。 –

+0

...我試過你的查詢,它的工作..像魅力..非常感謝你保存了我的另一個小時...再次感謝你.. – SmartDev