繁体   English   中英

如何在Oracle中对UNION ALL子查询求和

[英]How do I SUM a UNION ALL Subquery in Oracle

对于下面的代码,我从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

有什么建议吗?

SELECT
    id,code,SUM(productCount1)

FROM
    (SELECT
        id1,
        code1,
        COUNT(DISTINCT(product)) as productCount1
    FROM
        table1
    GROUP BY
        id1,
        code1

UNION ALL

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

UNION ALL

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

请遵循此代码。

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个表进行测试。 此代码运行无任何错误。 只需遵循内部查询中的列别名,外部查询的列名将相同。

该问题中的查询不会产生所述错误,并且以下内容仅针对列别名和使用distinct进行了更正。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM