【问题标题】:multiple select in one query [Teradata]一次查询中的多项选择 [Teradata]
【发布时间】:2013-05-03 08:12:51
【问题描述】:
我正在尝试从差异表中进行多项选择,并且只在一列中显示结果。
SELECT COUNT(*) FROM tb1 union
SELECT COUNT(*) FROM tb2 union
SELECT COUNT(*) FROM tb3;
输出应该是这样的:
593643
18103600
0
问题在于结果是按 desc 顺序排列的。
如下:
0
593643
18103600
我希望结果与我放置 select 语句时一样。
请指教。顺便说一句,我正在使用 teradata。
谢谢。
【问题讨论】:
标签:
sql
oracle
select
count
teradata
【解决方案1】:
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
【解决方案2】:
如果您想要特定的顺序,请添加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 ;