sql - 如何使用别名对这些值进行减法
问题描述
我有这个代码:
SELECT
Coalesce(Sum(Case When M.TIPO_MOVIMENTO = 'EE' Then M.VALOR End), 0) AS VALOR_EST_EMPENHO ,
Coalesce(Sum(Case When M.TIPO_MOVIMENTO = 'LI' Then M.VALOR End), 0) AS VALOR_LIQ_BRUTO,
Coalesce(Sum(Case When M.TIPO_MOVIMENTO = 'EL' Then M.VALOR End), 0) AS VALOR_EST_LIQUIDACAO,
Coalesce(Sum(Case When M.TIPO_MOVIMENTO In ('PG', 'RT') Then M.VALOR End), 0) AS VALOR_PAG_BRUTO,
Coalesce(Sum(Case When M.TIPO_MOVIMENTO = 'EP' Then M.VALOR End), 0) AS VALOR_EST_PAGAMENTO,
EMP_COD
FROM
CTP_DESPESA_EMPENHADA_MOVIMENTACAO_VI M
GROUP BY
M.EMP_COD
我想要做的是减去它们并获得值,但它们使用别名,所以当我这样做时,我VALOR_EST_EMPENHO - VALOR_LIQ_BRUTO
会得到以下错误:
消息 207,级别 16,状态 1,第 23 行
无效的列名称“VALOR_EST_EMPENHO”
我该怎么做?
解决方案
几件事:
- CASE WHEN 语句有一个 ELSE 路径。最好将其设置为 0 以避免 COALESCE。
正如其他人所建议的,您可以重复 COALESCE(SUM()) 指令以获得所需的结果。但是为了可读性,我知道你来自哪里。
SELECT Sum(CALCULATED.VALOR_EST_EMPENHO) AS VALOR_EST_EMPENHO , Sum(CALCULATED.VALOR_LIQ_BRUTO) AS VALOR_LIQ_BRUTO , Sum(CALCULATED.VALOR_EST_LIQUIDACAO) AS VALOR_EST_LIQUIDACAO , Sum(CALCULATED.VALOR_PAG_BRUTO) AS VALOR_PAG_BRUTO , Sum(CALCULATED.VALOR_EST_PAGAMENTO) AS VALOR_EST_PAGAMENTO , Sum(CALCULATED.VALOR_EST_EMPENHO - CALCULATED.VALOR_LIQ_BRUTO) AS VALOR_X , M.EMP_COD FROM CTP_DESPESA_EMPENHADA_MOVIMENTACAO_VI M CROSS APPLY( SELECT Case When M.TIPO_MOVIMENTO = 'EE' Then M.VALOR ELSE 0 End AS VALOR_EST_EMPENHO , Case When M.TIPO_MOVIMENTO = 'LI' Then M.VALOR ELSE 0 End AS VALOR_LIQ_BRUTO , Case When M.TIPO_MOVIMENTO = 'EL' Then M.VALOR ELSE 0 End AS VALOR_EST_LIQUIDACAO , Case When M.TIPO_MOVIMENTO In ('PG', 'RT') Then M.VALOR ELSE 0 End AS VALOR_PAG_BRUTO , Case When M.TIPO_MOVIMENTO = 'EP' Then M.VALOR ELSE 0 End AS VALOR_EST_PAGAMENTO ) CALCULATED GROUP BY M.EMP_COD
CROSS APPLY 语句产生的内联表是针对每一行计算的。在执行时,查询将扩展内联表中使用的列,因此有效地,这将导致查询包含更多 CASE WHEN 语句。
我希望这有帮助。