在SQL查询中,不能用这些名称减去具有给定名称的计算列

在SQL查询中不能用这些名称减去具有给定名称的计算列。有谁能告诉我问题出在哪里?

SELECT DISTINCT 
    MT.UnitNo,UC.UnitName,(SELECT (SUM(CAST(IsnULL(UnitPrice,'0') AS BIGINT)))
      FROM MonthlyUnitPrice MUP
      WHERE MUP.[Year] = '1398'
        AND MUP.UnitNo = MT.UnitNo) AS AnnualQuota,(SELECT (SUM(CAST(IsnULL(TotalCalculatedPrice,'0') AS BIGINT)))
      FROM [Managertable] MTB
      WHERE MTB.[Year] = '1398'
        AND MTB.[Month] < '9'
        AND MTB.UnitNo = MT.UnitNo) AS TotalUsage,(AnnualQuota - TotalUsage)
FROM 
    Managertable MT
INNER JOIN 
    UnitCodes UC ON UC.UnitNO = MT.UnitNO
INNER JOIN 
    MonthlyUnitPrice MU ON MT.UnitNO = MU.UnitNO
                        AND MT.[Year] = MU.[Year]
                        AND MT.[Month] = MU.[Month]
WHERE  
    MT.[Year] = '1398'
    AND MT.[Month] < 9
    AND MU.UnitPrice IS NOT NULL
GROUP BY 
    MT.UnitNo,UC.UnitName

错误:

第207条消息,第16级,状态1,第15行
无效的列名“ AnnualQuota”

第207条消息,第16级,状态1,第15行
无效的列名“ TotalUsage”

chuang700 回答:在SQL查询中,不能用这些名称减去具有给定名称的计算列

这是[具有可接受的性能]计算比率的正确方法:

With AnnualQuotaCTE as (
    SELECT
        SUM(UnitPrice) as TotalUnitPrice,UnitNo
    FROM MonthlyUnitPrice
    WHERE [Year] = '1398'
    Group by UnitNo

),TotalUsageCTE as (
    SELECT
        SUM(TotalCalculatedPrice) as SumTotalCalculatedPrice,UnitNo
    FROM [ManagerTable]
    WHERE [Year] = '1398' AND [Month] < '9'
    Group by UnitNo
)

SELECT 
    MT.UnitNo,UC.UnitName,AnnualQuotaCTE.AnnualQuota,TotalUsageCTE.TotalUsage,(Isnull(AnnualQuotaCTE.AnnualQuota,0) - isnull(TotalUsageCTE.TotalUsage,0)) as UsageRatio
FROM ManagerTable MT
INNER JOIN UnitCodes UC ON UC.UnitNO = MT.UnitNO
INNER JOIN MonthlyUnitPrice MU ON MT.UnitNO = MU.UnitNO AND MT.[Year] = MU.[Year] AND MT.[Month] = MU.[Month]
LEFT JOIN AnnualQuotaCTE on AnnualQuotaCTE.UnitNo = MT.UnitNo
LEFT JOIN TotalUsageCTE on TotalUsageCTE.UnitNo = MT.UnitNo
WHERE MT.[Year] = '1398' AND MT.[Month] < 9 AND MU.UnitPrice IS NOT NULL
GROUP BY MT.UnitNo,TotalUsageCTE.TotalUsage

此外,您可以将年和月添加到CTE和主要查询中。

,

我认为您可以大大简化查询:

SELECT MT.UnitNo,SUM(UnitPrice) as TotalUsage,AnnualQuota
       (AnnualQuota - SUM(UnitPrice)
FROM ManagerTable MT JOIN
     UnitCodes UC 
     ON UC.UnitNO = MT.UnitNO LEFT JOIN
     (SELECT MUP.UnitNo,SUM(UnitPrice) AS AnnualQuota
      FROM MonthlyUnitPrice MUP
      WHERE MUP.[Year] = '1398'
      GROUP BY MUP.UnitNo
     ) MUP
     ON MUP.UnitNo = MT.UnitNo
WHERE MT.[Year] = '1398' AND
      MT.[Month] < 9
GROUP BY MT.UnitNo,UC.UnitName;

如果您需要转换为BIGINT

SELECT MT.UnitNo,SUM(CONVERT(BIGINT,UnitPrice)) as TotalUsage,AnnualQuota
       (AnnualQuota - SUM(CONVERT(BIGINT,UnitPrice))
FROM ManagerTable MT JOIN
     UnitCodes UC 
     ON UC.UnitNO = MT.UnitNO LEFT JOIN
     (SELECT MUP.UnitNo,UnitPrice)) AS AnnualQuota
      FROM MonthlyUnitPrice MUP
      WHERE MUP.[Year] = '1398'
      GROUP BY MUP.UnitNo
     ) MUP
     ON MUP.UnitNo = MT.UnitNo
WHERE MT.[Year] = '1398' AND
      MT.[Month] < 9
GROUP BY MT.UnitNo,UC.UnitName
本文链接:https://www.f2er.com/2818294.html

大家都在问