【问题标题】:Return COUNT rows of two SELECT related by UNION返回由 UNION 关联的两个 SELECT 的 COUNT 行
【发布时间】:2018-12-05 05:41:27
【问题描述】:

我想返回由 UNION 关联的两个表中包含列的行数。 我写了这个查询

SELECT(
      (SELECT * FROM(
       (SELECT
        ID_COMPTE,
        TITLE,
        LINK,
        DATE_CREAT,
        DATE_MODIF,
        'TF1' AS "TYPE_FICHIER",
        case when DATE_MODIF is null then DATE_CREAT else DATE_MODIF end as LAST_UPDATE FROM FIRST_TABLE FFF where ID_COMPTE= 11111111)

        UNION

        (SELECT
        ID_COMPTE,
        TITLE,
        LINK,
        DATE_CREAT,
        DATE_MODIF,
        'TF2' AS "TYPE_FICHIER",
        case when DATE_MODIF is null then DATE_CREAT else DATE_MODIF end as LAST_UPDATE FROM SECOND_TABLE SSS where ID_COMPTE= 11111111)
        order by LAST_UPDATE desc
        ) parentSelect WHERE ROWNUM BETWEEN 0 AND 2)), count(firstSelect) FROM firstSelect;

目的是返回最后两行以及表1和表2所有行的计数。 没有计数的查询工作正常,只是导致问题的计数,我不知道如何插入它。 我还尝试对父 SELECT 中的每个 SELECT 和 SUM 使用 count() 但它不起作用。

【问题讨论】:

  • 人们会注意到联合消除了重复。如果您需要重复项,您可以考虑使用 UNION ALL
  • 不要让我们猜测您想看到的最终输出。显示表格中的一些示例行和所需的输出。请记住,仅以 text 格式发布。

标签: sql oracle count


【解决方案1】:

这个概念应该适合你。基本上你在 with 子句中选择你想要的数据。然后在主选择中,选择数据和计数。

WITH
base AS
(
    SELECT 'TEST1' DATA FROM DUAL
    UNION ALL 
    SELECT 'TEST2' DATA FROM DUAL
    UNION ALL
    SELECT 'TEST3' DATA FROM DUAL
)
SELECT (SELECT COUNT(*) FROM base) AS KOUNT, base.*
FROM base
;

【讨论】:

  • 谢谢回复,我试过了,还是不行。如果我做 SELECT (COUNT() FROM base AS KOUNT), base. FROM base;它返回 00907. 00000 - “缺少右括号”。如果我做 SELECT COUNT() FROM base AS KOUNT, base. FROM base;它返回 00933. 00000 - “SQL 命令未正确结束”
  • 当您使用 Oracle 时,我为您做了一个工作示例
【解决方案2】:

您可以使用 #Temp ( TempTable )。 在其中插入或操作您想要的行,最后从存储过程中返回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2017-05-15
    • 1970-01-01
    • 2017-10-22
    相关资源
    最近更新 更多