2013-05-08 58 views
0

我正在嘗試從差異表中進行多重選擇,並且只在一列中有結果。在一個查詢中選擇多個[Teradata]

SELECT COUNT(*) FROM tb1 union 
SELECT COUNT(*) FROM tb2 union 
SELECT COUNT(*) FROM tb3; 

輸出應該是這樣的:

593643 
18103600 
0 

問題的,這是它的結果被佈置在遞減順序。 象下面這樣:

0 
593643 
18103600 

我希望得到的結果是,因爲我把select語句。 請指教。順便說一句,我正在使用teradata。 謝謝。

回答

3

SQL結果集本質上是無序的,除非你明確指定order by條款。你可以用子查詢來做到這一點:

select cnt 
from ((SELECT COUNT(*) as cnt, 1 as ord FROM tb1) 
     union all 
     (SELECT COUNT(*), 2 FROM tb2) 
     union all 
     (SELECT COUNT(*), 3 FROM tb3) 
    ) t 
order by ord 
3

如果您想要特定訂單,請添加ORDER BY條款。這也將是很好用UNION ALL,讓您始終獲得3行,即使有重複的結果(兩代表具有相同的行數):

SELECT 'tbl1' AS tablename, COUNT(*) AS cnt, 1 AS ord FROM tb1 UNION ALL 
SELECT 'tbl2', COUNT(*), 2 FROM tb2 UNION ALL 
SELECT 'tbl3', COUNT(*), 3 FROM tb3 
ORDER BY ord ;