2015-08-15 236 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加入/在哪裏條件。