【发布时间】:2022-01-23 16:21:04
【问题描述】:
当我尝试执行此错误时,我有以下更新查询。有什么办法可以解决吗?
错误信息:
Msg 4108, Level 15, State 1, Line 41
Windowed functions can only appear in the SELECT or ORDER BY clauses.
完成时间:2021-12-22T17:56:29.7517046+05:30
update EmpPFContributionTest
Set EmpContbtnWithoutTax =
(
case when sum(isnull(epf.emp_contribution,0)) over(partition by epf.emp_no, epf.FinancialYear order by (epf.pcm_year * 100 + pcm_month)) + sum(isnull(epf.vpf,0)) over(partition by epf.emp_no, epf.FinancialYear order by (epf.pcm_year * 100 + epf.pcm_month)) < 3000
then sum(isnull(epf.emp_contribution,0)) over(partition by epf.emp_no, epf.FinancialYear order by (epf.pcm_year * 100 + pcm_month)) + sum(isnull(epf.vpf,0)) over(partition by epf.emp_no, epf.FinancialYear order by (epf.pcm_year * 100 + epf.pcm_month))
else null
end
)
from EmpPFContributionTest epf
【问题讨论】:
-
您需要使用可更新的 CTE 或子查询。尽管将聚合值存储在表中通常不是一个好主意;每次
UPDATE或INSERT单个行时,您都需要更新大量行,因此您将不断成为您的尾巴。VIEW会是更好的选择。 -
实际上与您标记为已回答的previous post 的问题相同,但您随后回复说您实现了一个视图。
-
看来SQLPro给出的解决方案也和here一样有效。我不明白为什么这是一个新问题。
标签: sql sql-server tsql