![](/img/trans.png)
[英]Error: “Multiple columns are specified in an aggregated expression containing an outer reference.”
[英]Multiple Columns in Aggregated Expression Containing Outer Reference
我有一個更大的查詢的以下部分(外部申請被用於超出此問題范圍的原因):
select top 100 *
from (
select SSN, Program, Year, Cycle,
case when (lead(Year,1,0) over (partition by SSN, Program order by Year, Cycle)=0 and Year != last_value(Year) over(order by Year ROWS between unbounded preceding and unbounded following))
or (lead(Year,1,0) over (partition by SSN, Program order by Year, Cycle)-1900)*2+lead(Cycle,1,0) over (partition by SSN, Program order by Year, Cycle)-((Year-1900)*2+Cycle)>2
then ((Year-1900)*2+Cycle)*2 else null end as ExitQuarter
from dbo.Temp_Cohort
where Program!='BSG' and Program!='BSD'
) as R
outer apply
(
select sum(case when (Year-1900)*4+Quarter>R.ExitQuarter and (Year-1900)*4+Quarter<R.ExitQuarter+5 then Wage else null end) as Wage1,
sum(case when (Year-1900)*4+Quarter>R.ExitQuarter+4 and (Year-1900)*4+Quarter<R.ExitQuarter+9 then Wage else null end) as Wage2,
sum(case when (Year-1900)*4+Quarter>R.ExitQuarter+8 and (Year-1900)*4+Quarter<R.ExitQuarter+13 then Wage else null end) as Wage3,
sum(case when (Year-1900)*4+Quarter>R.ExitQuarter+12 and (Year-1900)*4+Quarter<R.ExitQuarter+17 then Wage else null end) as Wage4,
sum(case when (Year-1900)*4+Quarter>R.ExitQuarter+16 and (Year-1900)*4+Quarter<R.ExitQuarter+21 then Wage else null end) as Wage5
from dbo.Wage_Hist
where SSN=R.SSN
) as W
當我執行時,我收到以下錯誤: Multiple columns are specified in an aggregated expression containing an outer reference. If an expression being aggregated contains an outer reference, then that outer reference must be the only column referenced in the expression.
Multiple columns are specified in an aggregated expression containing an outer reference. If an expression being aggregated contains an outer reference, then that outer reference must be the only column referenced in the expression.
您有解決方法或修復方法的建議嗎?
select top 100 *
from (
select SSN, Program, Year, Cycle,
case when (lead(Year,1,0) over (partition by SSN, Program order by Year, Cycle)=0 and Year != last_value(Year) over(order by Year ROWS between unbounded preceding and unbounded following))
or (lead(Year,1,0) over (partition by SSN, Program order by Year, Cycle)-1900)*2+lead(Cycle,1,0) over (partition by SSN, Program order by Year, Cycle)-((Year-1900)*2+Cycle)>2
then ((Year-1900)*2+Cycle)*2 else null end as ExitQuarter
from dbo.Temp_Cohort
where Program!='BSG' and Program!='BSD'
) as R
outer apply
(
SELECT [1] Wage1, [2] Wage2, [3] Wage3, [4] Wage4, [5] Wage5
FROM (
SELECT Wage, (R.ExitQuarter-((Year-1900)*4+Quarter)+3) / 4) WagePeriod
FROM dbo.Wage_Hist
WHERE SSN=R.SSN
) p1
PIVOT(SUM(Wage) FOR WagePeriod IN ([1],[2],[3],[4],[5])) p2
) as W
這是最終的解決方案...... Anon讓我到了正確的地方,但只需要一些語法和數學修復。
select top 100 *
from (
select SSN, Program, Year, Cycle,
case when (lead(Year,1,0) over (partition by SSN, Program order by Year, Cycle)=0 and Year != last_value(Year) over(order by Year ROWS between unbounded preceding and unbounded following))
or (lead(Year,1,0) over (partition by SSN, Program order by Year, Cycle)-1900)*2+lead(Cycle,1,0) over (partition by SSN, Program order by Year, Cycle)-((Year-1900)*2+Cycle)>2
then ((Year-1900)*2+Cycle)*2 else null end as ExitQuarter
from dbo.Temp_Betty_Cohort
where Program!='BSG' and Program!='BSD'
) as R
outer apply
(
select [1] as Wage1, [2] as Wage2, [3] as Wage3, [4] as Wage4, [5] as Wage5
from
(
select Wage, round(((Year-1900)*4+Quarter-R.ExitQuarter+3)/4,0,1) as Period
from dbo.Wage_Hist
where SSN=R.SSN
) as S
pivot
(
sum(Wage) for Period in ([1],[2],[3],[4],[5])
) as P
) as H
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.