sql - 在 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”
解决方案
这是计算比率的正确方法[具有可接受的性能]:
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, UC.UnitName, AnnualQuotaCTE.AnnualQuota, TotalUsageCTE.TotalUsage
此外,您可以将年份和月份添加到 CTE 和主查询。
推荐阅读
- javascript - 如何使用codeigniter上传和移动文件onclick按钮jquery?
- cmake - 避免创建 cmake_install.cmake 文件
- oracle - 将语句级触发器转换为行级触发器
- jenkins - 通过 Jenkins 连接 Git 存储库抛出 Permission Denied 错误
- javascript - 使用 amCharts 执行事件侦听器 clickGraphItem 时如何引用 JavaScript 对象数组中的变量
- ios - WKWebView 的 WKUrlSchemeHandler 和带有 Secure 属性的 Cookies
- reactjs - 构建 Reacjs 项目后不透明度值更改为 1%
- powershell - 如何在 Powershell 中对字符串进行 hash256 和数字签名(使用私钥)
- php - 错字3 tt_news 配置列表模板
- apache-kafka - 同一 Kafka 主题的多个 Flink 管道