2017-03-29 58 views
-2

我現在有問題的列。我希望得到的結果假設是這樣的:SQL Server - 分組到一列

EmployeeID EducationalLoan 
-------------- 
1    0.00 
2    100.00 

但結果顯示,

EmployeeID EducationalLoan 
-------------- 
1    100.00 
2    100.00 

什麼我想實現這個時候是我想看到的只是員工貸款扣除價格上另一方面它只顯示0.00。

我知道theres背後的一個小竅門,有人可以幫我嗎?

DECLARE @EmployeeID AS INTEGER 

SET @EmployeeID = 0; 
SELECT DISTINCT 
     [EmployeeID] = emp.EmployeeID, 
     [EducationalLoan] = (SELECT ISNULL(SUM((CAST((lc.LoanAmount/((dbo.fnNumberOfYears(CONVERT(VARCHAR(15), LoanDateStart, 101), CONVERT(VARCHAR(15), LoanPaymentDue, 101)) * 12) * 2)) AS DECIMAL(18,2)))),0) FROM LoanContract lc WHERE lc.LoanTypeID = 1) 
FROM Employee emp 
    INNER JOIN Salary sal ON sal.EmployeeID = emp.EmployeeID 
    INNER JOIN LoanContract lc ON lc.EmployeeID = emp.EmployeeID 
    INNER JOIN LoanType lt ON lt.LoanTypeID = lc.LoanTypeID 
    LEFT JOIN LoanPayments lp ON lp.LoanID = lc.LoanID 
    LEFT JOIN LoanFrequency lf ON lf.LoanFrequencyID = lc.LoanFrequencyID 
WHERE emp.EmployeeID IN (SELECT EmployeeID FROM Employee WHERE EmployeeID LIKE '%' + CASE WHEN ISNULL(@EmployeeID,0) <> 0 THEN CAST(ISNULL(@EmployeeID, 0) AS VARCHAR(15)) ELSE '' END + '%') 
GROUP BY emp.EmployeeID, lt.LoanTypeID 
+0

請編輯您的問題,包括樣本數據的DDL + DML。 –

回答

2

你不按員工在你的子查詢

SELECT ISNULL(SUM((CAST((lc.LoanAmount/((dbo.fnNumberOfYears(CONVERT(VARCHAR(15), LoanDateStart, 101), CONVERT(VARCHAR(15), LoanPaymentDue, 101)) * 12) * 2)) AS DECIMAL(18,2)))),0) 
    FROM LoanContract lc 
    WHERE lc.LoanTypeID = 1 

過濾器應該是這樣的:

SELECT ... 
    FROM LoanContract lc 
    WHERE lc.LoanTypeID = 1 
    AND lc.EmployeeID = emp.EmployeeID 
+0

@Voltech,你救了我的一天!非常感謝! –