员工表(employee):employeeNo(员工No),employeeName,age(年龄).......
工资表(salary):salaryDate(工资发放时间),employeeNo(员工No),salary(工资)
返回2007年2月份的高于平均工资的员工信息和工资,也即返回内容为(salaryDate,employeeNo,employeeName,age,salary)的列表。

解决方案 »

  1.   

    这样吧。SELECT T2.SALARYDATE, T2.EMPLOYEENO, T1.EMPLOYEENAME, T1.AGE, T2.SALARY
    FROM EMPLOYEE T1, SALARY T2
    WHERE T1.EMPLOYEENO = T2.EMPLOYEENO
    AND T2.SALARYDATE ='200702'
    AND T2.SALARY >
    ( SELECT AVG(T3.SALARY) FROM SALARY T3 WHERE T3.SALARYDAE ='200702')
    ;
      

  2.   


    SELECT S.salaryDate, E.employeeNo, E.employeeName, E.age, S.salary
      FROM employee E, salary S
     WHERE E.employeeNo = S.employeeNo
       AND S.salaryDate >= TO_DATE('20070201', 'YYYYMMDD')
       AND S.salaryDate <= TO_DATE('20070229', 'YYYYMMDD')
       AND S.salary >
           (SELECT AVG(salary)
              FROM salary
             WHERE salaryDate >= TO_DATE('20070201', 'YYYYMMDD')
               AND salaryDate <= TO_DATE('20070229', 'YYYYMMDD'))
    忘记了07年2月事多少天了,对你公司什么时候发工资也不清楚。。
      

  3.   

    SELECT S.salaryDate, E.employeeNo, E.employeeName, E.age, S.salary
    FROM employee E, salary S
    WHERE E.employeeNo = S.employeeNo
       AND TO_DATE(S.salaryDate,'YYYYMM') = '200702'
       AND S.salary >
           (SELECT AVG(salary)
              FROM salary
             WHERE TO_DATE(salaryDate,'YYYYMM') = '200702')
      

  4.   

    单条SQL文实现的话正如楼上的诸位所言,
    不过就效率而言,先用一条sql取平均值,
    在用一条sql去信息比较高。
    1,SELECT AVG(salary) into avgSAL
              FROM salary 
            WHERE TO_DATE(salaryDate,'YYYYMM') = '200702'
    2,SELECT S.salaryDate, E.employeeNo, E.employeeName, E.age, S.salary 
      FROM employee E, salary S 
      WHERE E.employeeNo = S.employeeNo 
        AND TO_DATE(S.salaryDate,'YYYYMM') = '200702' 
        AND S.salary > avgSAL
      

  5.   

    前面的写法基本没错,不过楼主要注意salaryDate这个字段的数据类型
    而to_date(salarydate,'yyyymm')='200702'
    这个条件明显是错误的,to_date应该改为to_char
    这也要salaryDate是日期类型才能这样做
    但我想salaryDate应该是200702、200703这样的字符串吧
    如salaryDate是日期SELECT S.salaryDate, E.employeeNo, E.employeeName, E.age, S.salary
      FROM employee E, salary S
     WHERE E.employeeNo = S.employeeNo
       AND to_char(S.salaryDate,'yyyymm') = '200702'
       AND S.salary >
           (SELECT AVG(salary)
              FROM salary
             WHERE to_char(salaryDate,'yyyymm') = '200702')如是200702这样的字串
    直接等于就行salaryDate='200702'
      

  6.   

    SELECT t2.salaryDate,t1.employeeNo,t1.employeeName,t1.age,t2.salary
    FROM employee t1,salary t2
    WHERE t1.employeeNo=t2.employeeNo
    AND   TO_CHAR(t2.employeeDate,'YYYYMM')='200702'
    AND NVL(t2.salary,0)>(SELECT AVG(NVL(t3.salary,0))
                          FROM  salary t3
                          WHERE TO_CHAR(t3.employeeDate,'YYYYMM')='200702')
      

  7.   

    SELECT s.salarydate, e.employeename, e.age, s.salary
      FROM salary s, employee e
     WHERE s.employeeno = e.employeeno
       AND s.salarydate = '200702'
       AND s.salary > (SELECT AVG (salary)
                         FROM salary
                        WHERE salarydate = '200702')
      

  8.   


    SELECT S.salaryDate, E.employeeNo, E.employeeName, E.age, S.salary 
    FROM employee E, salary S 
    WHERE E.employeeNo = S.employeeNo 
      AND TO_CHAR(S.salaryDate,'YYYYMM') = '200702' 
      AND S.salary > (SELECT AVG(salary) 
                      FROM salary 
                      WHERE TO_CHAR(salaryDate,'YYYYMM') = '200702') 
      

  9.   

    就是这样 SELECT s.SALARYDATE, e.EMPLOYEENO, e.EMPLOYEENAME, e.AGE, e.SALARY 
    FROM EMPLOYEE e, SALARY s 
    WHERE e.EMPLOYEENO = s.EMPLOYEENO 
    AND s.SALARY > 
    ( SELECT AVG(sa.SALARY) FROM SALARY sa WHERE sa.SALARYDAE ='200702' and sa.SALARYDAE =s.SALARYDAE ) ;