【问题标题】:Return number of records in SQL select union返回 SQL 选择联合中的记录数
【发布时间】:2015-01-08 15:59:31
【问题描述】:

我正在尝试创建一个选择查询,以使其符合某种格式。我需要第一行中的字符串“记录计数”。然后我还需要第二列第 1 行的行数。然后我需要将它与另一个查询联合

Record Count    125 
2134123 

这是我希望输出显示为 csv 中的样本的样子

Record Count,125
99902064
12312312

我尝试了以下代码

SELECT 'Record Count', count(select loginid
from employees)
FROM dual
union
select loginid
from employees

当我这样做时,会将单词记录计数放入所有行中。我只想要第 1 行中的记录计数,然后下一列有实际的 #。我也在考虑将列标题更改为“记录计数”,但我不知道如何将下一个列标题设为 #,即使用 count(*)。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    如果您需要按特定顺序排列的行,则需要使用order by。这是一种方法:

    select loginid, cnt
    FROM (SELECT 'Record Count' as loginid, (select count(loginid) from employees) as cnt, 1 as ordering
          FROM dual
          union all
          select loginid, NULL, 2
          from employees
         ) t
    order by ordering;
    

    union 中的子查询也应具有相同的列,并且应为列指定名称。而且,我不知道您可以使用子查询作为count() 的参数。

    对于这种形式,这是编写查询的更好方法:

    select loginid, cnt
    FROM (SELECT 'Record Count' as loginid, count(loginid) as cnt, 1 as ordering
          FROM employees
          union all
          select loginid, NULL, 2
          from employees
         ) t
    order by ordering;
    

    【讨论】:

    • 在这种情况下record count 将始终是第一行,因为我认为是联合中的第一个查询
    • @Aramillo - 在这个版本中可能会是,因为它有union all 而不仅仅是union,所以没有排序/合并步骤。在您的版本中,它可能会出现故障,具体取决于会话 NLS 排序设置。但是即使使用union all,我认为订单也不能保证;该行为将来可能会发生变化,因此明确订购它会更安全。
    • 对不起@AlexPoole,但我认为联合和联合都可以根据查询的顺序获取行,但如果你这么说,我想我必须深入探讨这个话题,谢谢你的提示
    • @Aramillo - 比较输出 here;并具有更多价值here。作为重复消除过程的一部分,union 值被排序。
    • 哎呀,我明白了,我不知道这个。再次感谢@AlexPoole
    【解决方案2】:

    您可以使用 sqlplus spool 来实现相同的删除联合。

    如何假脱机How do I spool to a CSV formatted file using SQLPLUS?的示例

    SELECT 'Record Count'|| ','|| count(select loginid
     from employees)
     FROM dual;
     select loginid
     from employees;
    

    【讨论】:

    • 根据经验我们在sqlplus中使用这种脚本来生成csv文件
    猜你喜欢
    • 2012-11-03
    • 1970-01-01
    • 2023-03-23
    • 2013-08-22
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多