当我运行以下查询时,出现错误:
为变量赋值的 SELECT 语句不得与数据检索操作结合使用。
我应该如何解决这个问题?
这是查询:
DECLARE @loanInstallmet float
SELECT TOP (1)
loan.loanID,members.offno AS OfficialNumber,
loan.loanAmount,
loan.interestRate,
loan.NoOfInstallment,
loanHistory.presentInstallmentNo,
loanHistory.dateBalanceUpdate,
(loanHistory.presentInstallmentNo + 1) AS InstallmentNo,
members.monthllyContribution AS MonthlyContribution,
@loanInstallmet =
CASE
WHEN loan.remarks = 'Half' THEN ROUND(loanHistory.balanceAmount/ (loan.NoOfInstallment-loanHistory.presentInstallmentNo ), 0)
ELSE ROUND((loan.loanAmount / loan.NoOfInstallment), 0)
END,
CASE
WHEN loanHistory.presentInstallmentNo % 12 = 0 THEN ROUND(((loan.loanAmount-loanHistory.balanceAmount) * loan.interestRate / 1200), 0)
ELSE ROUND((loan.loanAmount * loan.interestRate / 1200), 0)
END AS MonthlyInterest,
LEFT(DATENAME(MONTH,Getdate()),3)as recMonth,
year(GETDATE())as recYear,
loan.isRecovered as LoanIsRecovered,
members.memberIsActive,
loanHistory.status,
ROUND((loanHistory.balanceAmount-@loanInstallmet), 0) AS BalanceAmount,
loan.remarks
FROM loan
INNER JOIN members
ON loan.offNo = members.offno
INNER JOIN loanHistory
ON members.offno = loanHistory.offNo
AND loan.loanID = loanHistory.loanID
WHERE
loan.isRecovered = 0
AND members.memberIsActive = 1
order by loanHistory.presentInstallmentNo DESC
Run Code Online (Sandbox Code Playgroud)
说的就是这个意思啊!;)
你不能这样做:
选择顶部 (1) 贷款.loanID,members.offno AS 官方编号, ....
同时:
SELECT @loanInstallmet = CASE WHEN Loan.remarks = 'Half' THEN
您要么正在检索应用程序的数据,要么正在设置变量的值。同时做这两件事是不合逻辑的。
如果您想计算 @loanInstallmet 并在将来的计算中使用它,您可以执行如下操作:
With tblLoanInstallCalc as (
SELECT TOP (1) loan.loanID,members.offno AS OfficialNumber,loan.loanAmount,loan.interestRate,loan.NoOfInstallment,loanHistory.presentInstallmentNo,loanHistory.dateBalanceUpdate,(loanHistory.presentInstallmentNo + 1) AS InstallmentNo, members.monthllyContribution AS MonthlyContribution,
CASE WHEN loan.remarks = 'Half' THEN ROUND(loanHistory.balanceAmount/ (loan.NoOfInstallment-loanHistory.presentInstallmentNo ), 0) ELSE ROUND((loan.loanAmount / loan.NoOfInstallment), 0) END AS loanInstallmet,
CASE WHEN loanHistory.presentInstallmentNo%12 = 0 THEN ROUND(((loan.loanAmount-loanHistory.balanceAmount) * loan.interestRate / 1200), 0) ELSE ROUND((loan.loanAmount * loan.interestRate / 1200), 0) END AS MonthlyInterest,
LEFT(DATENAME(MONTH,Getdate()),3)as recMonth,year(GETDATE())as recYear ,loan.isRecovered as LoanIsRecovered, members.memberIsActive, loanHistory.status, loan.remarks
FROM loan INNER JOIN
members ON loan.offNo = members.offno INNER JOIN
loanHistory ON members.offno = loanHistory.offNo AND loan.loanID = loanHistory.loanID
WHERE (loan.isRecovered = 0) AND (members.memberIsActive = 1)
)
Select *, ROUND((balanceAmount-loanInstallmet), 0) AS BalanceAmount
From tblLoanInstallCalc
Run Code Online (Sandbox Code Playgroud)
tblLoanInstallCalc 是一个公用表表达式 (CTE),在您尝试添加余额之前预先计算先决条件
| 归档时间: |
|
| 查看次数: |
9001 次 |
| 最近记录: |