2015-08-15 239 views
0

我的查询返回了错误的结果。请看下面的内容。我为所有员工获得相同的工资总额。SQL查询返回错误结果

我想要的结果如下表所示:

S.no Employee_name Emoloyee_id Gross Salary 
----------------------------------------------- 
1  Abc   001   1234567 
2  Xyz   002   2345667 
3  Dfg   003   456784 

下面是上面查询示例表。这包括以下视图和表:

的(a)V_HR_PP_PROCESS_DATA其包括用于工资总额的Amount

EMPLOYER_CODE TAX_YEAR EMPLOYEE_ID PROCESS_MONTH PD_CODE 
----------------------------------------------------------- 
RAD    2014   1   1   D001 
RAD    2014   1   1   Z001 
RAD    2014   3   2   Z500 

(b)中I_HR_SYS_DATE_MONTHLY

EMPLOYER_CODE TAX_YEAR MONTH 
------------------------------ 
RAD    2014 1 
RAD    2014 2 

(c)中I_HR_EMPLOYEE_MASTER

EMPLOYER_CODE EMPLOYEE_ID EMPLOYEE_NAME 
----------------------------------------------- 
RAD    1  GODWIN KOMBA 
RAD    2  JANE SHIBANDA 
RAD    3  ANDREW JOACHIM KIIZA 
RAD    4  AHMED IBRAHIM DAHAL 
RAD    5  ADAM KAWA 

The EMPLOYER_CODE = 'RAD'在所有这三个表格中都很常见。

请看看查询过,这是不给结果的要求:

SELECT 
    b.EMPLOYEE_NAME AS employeename, 
    (SELECT SUM(AMOUNT) 
    FROM V_HR_PP_PROCESS_DATA 
    WHERE EMPLOYER_CODE = A.EMPLOYER_CODE 
     AND EMPLOYEE_ID IN (SELECT EMPLOYEE_ID 
          FROM I_HR_EMP_EMPLOYMENT_DTL 
          WHERE EMPLOYER_CODE = A.EMPLOYER_CODE 
          AND CONTRACT_TERM = 'F') 
     AND PROCESS_MONTH BETWEEN 1 AND 10 
     AND PD_CODE = 'Z500') AS GROSS_CASUAL 
FROM 
    I_HR_SYS_DATE_MONTHLY A 
INNER JOIN 
    I_HR_EMPLOYEE_MASTER b ON b.EMPLOYER_CODE = A.EMPLOYER_CODE 
GROUP BY 
    A.EMPLOYER_CODE, b.EMPLOYEE_NAME 
+0

哪个RDBMS是这个呢?请添加一个标签来指定您是使用'mysql','postgresql','sql-server','oracle'还是'db2' - 或者其他的东西。 –

+0

sql -server是数据库 – kaurSukh

+0

什么是** S.no **的预期结果?它来自哪里?提出的查询不是上面输出的那个,是吗?如果“V_HR_PP_PROCESS_DATA其中包含Gross Salary的Amount字段”,您为什么不选择SELECT E.Employee_name,E.Employee_id,P.Amount AS GrossSalary FROM V_HR_PP_PROCESS_DATA P JOIN I_HR_EMPLOYEE_MASTER E ON P.Employee_id = E.Employee_id'? – Abecee

回答

0

下面的代码将服务器你,你要找的基本数据,

更改其中条件为u须─

select 
    s.EMPLOYEE_ID, EMPLOYEE_NAME, sum(AMOUNT) 
from 
    V_HR_PP_PROCESS_DATA s 
inner join 
    I_HR_EMPLOYEE_MASTER m on m.EMPLOYER_CODE = s.EMPLOYER_CODE 
          and m.EMPLOYEE_ID = s.EMPLOYEE_ID 
where 
    TAX_YEAR = 2014 
group by 
    s.EMPLOYER_CODE, s.EMPLOYEE_ID, EMPLOYEE_NAME, TAX_YEAR 

这里检查您的SQL http://www.sqlfiddle.com/#!6/00eb0/5/0

0

SELECT SUM(AMOUNT)子查询的所有员工,就不一一计算量。您有EMPLOYEE_ID IN (SELECT EMPLOYEE_ID...。只有雇主代码被过滤,但所有员工都被处理。因此,总结所有薪水是正常的。加入V_HR_PP_PROCESS_DATA.EMPLOYEE_ID = b.EMPLOYEE_ID加入/在哪里条件。