CREATE OR REPLACE VIEW V_HZY_SALARY
AS
SELECT D.DEPTNO DNO,D.DNAME DN,
MAX(E.SAL)MAX_SAL,
MIN(E.SAL)MIN_SAL,
AVG(E.SAL)AVG_SAL,
SUM(E.SAL)SUM_SAL
FROM EMP_HZY E ,DEPT D WHERE E.DEPTNO=D.DEPTNO GROUP BY D.DEPTNO,D.DNAME
SELECT E.ENAME,E.SAL,E.DEPTNO
FROM EMP_HZY E
WHERE E.SAL/2>(SELECT AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30)
出现单行子查询返回多个行!!新手求高人指导,谢谢。
WHERE E.SAL/2>(SELECT AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30)
下面(SELECT AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30)这个子句可能是多条,你视图中是根据 D.DEPTNO,D.DNAME两个条件分组的,这里select只有一个deptno条件
可以加(SELECT top 1 AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30)
CREATE OR REPLACE VIEW V_HZY_SALARY
AS
SELECT D.DEPTNO DNO,D.DNAME DN,
MAX(E.SAL)MAX_SAL,
MIN(E.SAL)MIN_SAL,
AVG(E.SAL)AVG_SAL,
SUM(E.SAL)SUM_SAL
FROM EMP_HZY E ,DEPT D WHERE E.DEPTNO=D.DEPTNO GROUP BY D.DEPTNO,D.DNAME
SELECT E.ENAME,E.SAL,E.DEPTNO
FROM EMP_HZY E
WHERE E.SAL/2>(SELECT AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30)
SELECT AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30这个执行返回一个值,
WHERE E.SAL/2>(SELECT AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30) 这里执行是大于这个值的都查询,不是单条语句的查询了
WHERE E.SAL/2>(SELECT AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30) 这里执行是大于这个平均值的都查询,不是单条语句的查询了
WHERE E.SAL/2>(SELECT AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30) 问题出在这一句,你可以试一下括号里的查询语句,esal/2 是不能>多个数值的,你可能写错了, 应该是WHERE E.SAL/2>(SELECT AVG(列名) from V_HZY_SALARY WHERE DEPTNO=30) 这样就可以了,子查询只会返回一个数值,esal/2>x 是可以的