如何在Oracle中汇总UNION ALL子查询

时间:2016-01-07 21:41:24

标签: sql oracle sum union union-all

对于下面的代码,我收到来自Oracle的以下错误消息:

  

“ORA-00923:未找到FROM关键字”。

SELECT
    t1.id,
    t1.code,
    SUM(t1.productCount)
FROM
    (SELECT
        id1,
        code1,
        COUNT(DISTINCT(product)) as productCount1
    FROM
        table1
    GROUP BY
        id1,
        code1

    UNION ALL

    SELECT
        id2,
        code2,
        COUNT(DISTINCT(product2)) as productCount2
    FROM
        table2
    GROUP BY
        id2,
        code2

    UNION ALL

    SELECT
        id3,
        code3,
        COUNT(DISTINCT(product3)) as productCount3
    FROM
        table3
    GROUP BY
        id3,
        code3) t1
GROUP BY
    t1.id,
    t1.code

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

请遵守此准则。

CREATE TABLE TABLE1
(
  ID1      NUMBER,
  CODE1    NUMBER,
  PRODUCT  NUMBER
);

CREATE TABLE TABLE2
(
  ID2       NUMBER,
  CODE2     NUMBER,
  PRODUCT2  NUMBER
);

CREATE TABLE TABLE3
(
  ID3       NUMBER,
  CODE3     NUMBER,
  PRODUCT3  NUMBER
);

    SELECT
        t1.id,
        t1.code,
        SUM(t1.productCount)
    FROM
        (SELECT id1 as id,
        code1 as code,
        COUNT(DISTINCT(product)) as productCount
        FROM   table1
        GROUP BY  id1,  code1
        UNION ALL
        SELECT id2 as id,
        code2 as code,
        COUNT(DISTINCT(product2)) as productCount
        FROM  table2
        GROUP BY id2,  code2
        UNION ALL
        SELECT id3 as id,
        code3 as code,
        COUNT(DISTINCT(product3)) as productCount
        FROM  table3
        GROUP BY  id3, code3
        ) t1
    GROUP BY  t1.id,t1.code

我创建了3个表进行测试。 此代码运行没有任何错误。只需按照内部查询中的列别名进行操作,外部查询的列名将相同。

答案 1 :(得分:0)

问题中的查询不会产生规定的错误,以下只是纠正列别名和使用不同的错误。

SELECT
      t1.idx
    , t1.codex
    , SUM(t1.productCount)
FROM (
      SELECT
            id1 AS idx
          , code1 AS codex
          , COUNT(DISTINCT product) AS productCount
      FROM table1
      GROUP BY
            id1
          , code1
      UNION ALL
            SELECT
                  id2
                , code2
                , COUNT(DISTINCT product2)
            FROM table2
            GROUP BY
                  id2
                , code2
      UNION ALL
            SELECT
                  id3
                , code3
                , COUNT(DISTINCT product3)
            FROM table3
            GROUP BY
                  id3
                , code3
      ) t1
GROUP BY
      t1.idx
    , t1.codex