【问题标题】:Two different table join view两个不同的表连接视图
【发布时间】:2017-09-28 10:13:34
【问题描述】:
CREATE VIEW KC_Salary AS 
SELECT DEPT_SNAP.DEPTNO,
        DEPT_SNAP.DNAME, 
        Sum(EMP.SAL) as Avg_Salary, 
        COUNT(EMP.SAL) as Total_Salary, 
        EMP.DEPTNO 
FROM DEPT_SNAP
union
select Sum(EMP.SAL) as Avg_Salary, 
       COUNT(EMP.SAL) as Total_Salary,
       EMP.DEPTNO 
from EMP;

我正在尝试使用两个不同的表创建视图。我得到了

SQL 错误:ORA-01789:查询块的结果数不正确 列 1. 00000 - “查询块的结果列数不正确”

如果您对正在发生的事情有任何提示或想法,请提供帮助。

【问题讨论】:

    标签: oracle join oracle-sqldeveloper union create-view


    【解决方案1】:

    您想合并两个语句的结果 - 其中第一个有五列,而第二个只有三列。两者都需要具有相同数量的列。 (并且同一位置的列需要是兼容的类型。)

    附带说明:您的列别名似乎与应用的函数并不匹配。

    更新

    总结 cmets,您可能正在寻找类似的东西:

    CREATE VIEW KC_Salary AS 
    SELECT
      D.DEPTNO
      , D.DNAME 
      , AVG(E.SAL) AS Avg_Salary
      , SUM(E.SAL) AS Total_Salary
    FROM DEPT_SNAP D
    JOIN EMP E
      ON D.DEPTNO = E.DEPTNO
    GROUP BY D.DEPTNO, D.DNAME
    ;
    

    【讨论】:

    • 我主要是下班工作,桌子的属性完全不同,但 DEPTNO。创建一个名为 KC_Salary 的视图。此视图应包含 deptno、dname,以及名为 Avg_Salary 的平均工资和名为 Total_Salary 的按部门编号分组的总工资。将创建视图语句复制到您的答案模板
    • 看来,您实际上不需要UNION,而是需要JOIN。接下来,可能需要GROUP BY(取决于是否为每个部门或整个公司请求聚合)。最后一点:AVG 表示 Avg_SalarySUM 表示 Total_Salary
    • CREATE VIEW GiftsList AS SELECT b.name user_from, c.name user_to, d.name gift_name, d.price gift_price FROM gift a INNER JOIN users b ON a.user_from = b.id 所以类似那么这个呢?
    • 一般来说:是的。但是你需要让你的表别名正确。您选择,例如,c.name。但是,您只有 a 用于 giftb 用于 users。换句话说:INNER JOIN 应该让你动起来——但你的礼物例子如果不调整就行不通。
    • 哦,好的,非常感谢。我只是对“EMP.SAL 作为“Avg_Salary””部分有问题,我尝试将 AVG(EMP.SAL) 作为“Avg_Salary”并按 AVG(Avg_Salary) 分组;
    【解决方案2】:
    CREATE VIEW KC_Salary AS 
    SELECT DEPT_SNAP.DEPTNO,
                   DEPT_SNAP.DNAME, 
                   Avg(EMP.SAL) as Avg_Salary, 
                   Sum(EMP.SAL) as Total_Salary
    FROM DEPT_SNAP 
        ,EMP
    WHERE DEPT_SNAP.DEPTNO = EMP.DEPTNO
    GROUP BY DEPT_SNAP.DEPTNO, DEPT_SNAP.DNAME
    

    【讨论】:

    • 在黑暗中完成拍摄.. 了解表格的结构以及所需的输出是很有帮助的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 2019-09-22
    • 1970-01-01
    • 2012-09-03
    相关资源
    最近更新 更多