无法绑定多部分标识符 "t7.rate_buy"

The multi-part identifier "t7.rate_buy" could not be bound

请帮助我解决此错误消息:

The multi-part identifier "t7.rate_buy" could not be bound.

我找不到解决方法。我使用 SQL Server 2012,我已经尝试了所有方法,但我不知道解决方案是什么。

谢谢

 SELECT t1.id, t1.q_no
     , (
         SELECT rate_buy
         FROM [dta].[dbo].[rates_exchange]
         WHERE date_r=t1.q_date
     ) AS t7
     , t1.account_name
     , (
         SELECT SUM(t1.maden/ t7.rate_buy) AS ex32
         FROM [dta].[dbo].[qyed] AS t5
         WHERE t1.q_date BETWEEN '01/01/2000' AND '01/01/2021' AND t1.third_id = 'F1'
     ) AS m_f
     , (
         SELECT SUM(t1.daen/(t7.rate_buy)) AS ex33
         FROM [dta].[dbo].[qyed] AS t6
         WHERE t1.q_date BETWEEN '01/01/2000' AND '01/01/2021' AND t1.third_id = 'F1'
     ) AS d_f
     , t1.third_id, t1.maden,t1.daen, t1.bayen, t1.q_date, t1.cur
     , (
         SELECT SUM(t1.maden/t7.rate_buy - t1.daen/t7.rate_buy) AS Expr5
         FROM [dta].[dbo].[qyed] AS t2
         WHERE (id <= t1.id) AND t1.[q_date] BETWEEN '01/01/2000' AND '01/01/2021' AND t1.third_id = 'F1'
     ) AS tot
     , t1.snd_type, t1.r_no
 FROM [dta].[dbo].[qyed] t1
 WHERE t1.third_id = 'F1' AND t1.[q_date] BETWEEN '01/01/2000' AND '01/01/2021'
 GROUP BY t1.id, t1.q_no, t1.account_name, t1.q_date, t1.third_id, t1.snd_type, t1.r_no, t1.daen, t1.maden, t1.bayen, t1.cur
        

您不能在与其定义相同的查询级别引用另一个计算列(排序除外)。一种解决方案是将 rate_buy 计算为 sub-query,例如

 SELECT t1.id, t1.q_no
     , t1.account_name
     , (
         SELECT SUM(t1.maden/t1.rate_buy) AS ex32
         FROM [dta].[dbo].[qyed] AS t5
         WHERE t1.q_date BETWEEN '01/01/2000' AND '01/01/2021' AND t1.third_id = 'F1'
     ) AS m_f
     , (
         SELECT SUM(t1.daen/(t1.rate_buy)) AS ex33
         FROM [dta].[dbo].[qyed] AS t6
         WHERE t1.q_date BETWEEN '01/01/2000' AND '01/01/2021' AND t1.third_id = 'F1'
     ) AS d_f
     , t1.third_id, t1.maden, t1.daen, t1.bayen, t1.q_date, t1.cur
     , (
         SELECT SUM(t1.maden/t1.rate_buy - t1.daen/t1.rate_buy) AS Expr5
         FROM [dta].[dbo].[qyed] AS t2
         WHERE (id <= t1.id) AND t1.[q_date] BETWEEN '01/01/2000' AND '01/01/2021' AND t1.third_id = 'F1'
     ) AS tot
     , t1.snd_type, t1.r_no
 FROM (
     SELECT *
         , (
             SELECT rate_buy
             FROM [dta].[dbo].[rates_exchange]
             WHERE date_r = t1.q_date
         ) AS rate_buy
     FROM [dta].[dbo].[qyed]
 ) AS t1
 WHERE t1.third_id = 'F1' AND t1.[q_date] BETWEEN '01/01/2000' AND '01/01/2021'
 GROUP BY t1.id, t1.q_no, t1.account_name, t1.q_date, t1.third_id, t1.snd_type, t1.r_no, t1.daen, t1.maden, t1.bayen, t1.cur;

鉴于您在 3 sub-queries 中引用了 t1,这就消除了拥有它们的意义。我怀疑您实际上想要以下内容,其中实际使用了 t5t6t2

 SELECT t1.id, t1.q_no
     , t1.account_name
     , (
         SELECT SUM(t5.maden/t1.rate_buy)
         FROM [dta].[dbo].[qyed] AS t5
         WHERE t5.q_date BETWEEN '01/01/2000' AND '01/01/2021' AND t5.third_id = 'F1'
     ) AS m_f
     , (
         SELECT SUM(t6.daen/(t1.rate_buy))
         FROM [dta].[dbo].[qyed] AS t6
         WHERE t6.q_date BETWEEN '01/01/2000' AND '01/01/2021' AND t6.third_id = 'F1'
     ) AS d_f
     , t1.third_id, t1.maden, t1.daen, t1.bayen, t1.q_date, t1.cur
     , (
         SELECT SUM(t2.maden/t1.rate_buy - t2.daen/t1.rate_buy)
         FROM [dta].[dbo].[qyed] AS t2
         WHERE (t2.id <= t1.id)
         AND t2.[q_date] BETWEEN '01/01/2000' AND '01/01/2021' AND t2.third_id = 'F1'
     ) AS tot
     , t1.snd_type, t1.r_no
 FROM (
     SELECT *
         , (
             SELECT rate_buy
             FROM [dta].[dbo].[rates_exchange]
             WHERE date_r = t1.q_date
         ) AS rate_buy
     FROM [dta].[dbo].[qyed]
 ) AS t1
 WHERE t1.third_id = 'F1' AND t1.[q_date] BETWEEN '01/01/2000' AND '01/01/2021'
 GROUP BY t1.id, t1.q_no, t1.account_name, t1.q_date, t1.third_id, t1.snd_type, t1.r_no, t1.daen, t1.maden, t1.bayen, t1.cur;

但是,如果这是您想要的,那么您可以使用 window 函数 sum 而不是 sub-query。我会试一试,但如果没有示例数据,我无法弄清楚这将如何与您的大量 group by.

交互