无法绑定多部分标识符 "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
,这就消除了拥有它们的意义。我怀疑您实际上想要以下内容,其中实际使用了 t5
、t6
和 t2
。
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
.
交互
请帮助我解决此错误消息:
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
,这就消除了拥有它们的意义。我怀疑您实际上想要以下内容,其中实际使用了 t5
、t6
和 t2
。
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
.