【问题标题】: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 ;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-06
        • 2017-04-30
        相关资源
        最近更新 更多