Sql server 错误:为变量赋值的SELECT语句不能与数据检索操作结合使用
运行以下查询时,出现了一个错误,说明: 不能使用为变量赋值的SELECT语句 与数据检索操作相结合 我该如何解决这个问题 以下是查询:Sql server 错误:为变量赋值的SELECT语句不能与数据检索操作结合使用,sql-server,Sql Server,运行以下查询时,出现了一个错误,说明: 不能使用为变量赋值的SELECT语句 与数据检索操作相结合 我该如何解决这个问题 以下是查询: DECLARE @loanInstallmet float SELECT TOP (1) loan.loanID,members.offno AS OfficialNumber, loan.loanAmount, loan.interestRate, loan.NoOfInstallment, loanHistory.
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
它在说它的意思 你不能这样做: 选择前1名loan.loanID、members.offno作为官方编号 同时: 选择@loanInstallmet=CASE WHEN loan.comments='Half',然后 您正在为应用程序检索数据,或者正在设置变量的值。同时做这两件事是不合逻辑的 如果要计算@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
TBLLOANISTALLCALC是一个常见的表表达式CTE,在您尝试累计余额之前,它正在预计算先决条件如何将此输出插入到另一个表中?您可以将select语句select ROUNDbalanceAmount loanInstallmet,0更改为insert语句,同时仍从TBLLOANISTALLCALIC插入如果我想同时执行这两项操作,为变量赋值并将数据返回给用户,我可以用一条select语句来完成吗,或者我必须重复同一条select语句两次?我想在回答之前我必须问的问题是,在将数据返回给用户之前,您打算如何处理变量中的值?