2013-12-10 82 views
3
select col1,col2,col3 from tab1 union all 
select col1,col2,col3 from tab2 

O/P-的Oracle SQL Developer輸出格式

COL1  COL2  COL3 
6518 10060152650 534010002 
6518 10060152651 534010002 
6518 10060152652 534020003 
6526 10060153296 534004002 
6526 10060153310 534004542 
6526 10060153365 533011103 
6526 10060153328 534010002 
6526 10060153348 534010002 

我希望它這樣

COL1 COL2   COL3 
6518 10060152650 534010002  
     10060152651 534010002  
     10060152652 534020003  
6526 10060153296 534004002  
     10060153310 534004542  
     10060153365 533011103  
     10060153328 534010002  
     10060153348 534010002 

任何一個可以幫助我.. !!

+0

格式化的一點努力在獲得快速響應方面有很長的路要走。 – Adarsh

回答

5

SQL開發人員向您顯示您選擇的行。由於您的行在Col1中包含一個值,因此它將顯示。所以你唯一的解決辦法是不要選擇它,或者在你的例子中:不要選擇它之前的行已包含相同的值。不要忘記排序。

select 
    case when col1 = lag(col1) over (order by col1, col2, col3) then 
    null 
    else 
    col1 
    end as colx 
, col2 
, col3 
from 
(
    select col1,col2,col3 from tab1 union all 
    select col1,col2,col3 from tab2 
) 
order by col1, col2, col3 
+0

謝謝Throsten這正是我正在尋找.... :-) – imtiyaz283

+1

似乎不工作:檢查http://sqlfiddle.com/#!4/02c4d/1 – Trinimon

+1

啊,謝謝你指出了。這是因爲我使用col1作爲別名,並且順序通過aslias而不是原始字段。 (我認爲這在Ora 10g中有所不同)我正在糾正它。這裏是改變的SQL小提琴:http://sqlfiddle.com/#!4/02c4d/11 –

2

這會爲你工作:

SELECT CASE 
      WHEN RANK() OVER (PARTITION BY col1 ORDER BY col2) <> 1 
      THEN '' 
      ELSE TO_CHAR(col1) 
     END AS col1, 
    col2, 
    col3 
FROM (
    SELECT col1, col2, col3 
    FROM tab1 

    UNION ALL 

    SELECT col1, col2, col3 
    FROM tab2 
    ) 

這裏是一個SQLFiddle與查詢是如何工作的。

0

sql * plus具有報告佈局命令。 SQLDeveloper顯示一個數據網格。

SQL>break on col1 nodup 
SQL>select col1,col2,col3 from tab1 union all select col1,col2,col3 from tab2;