我有这个密码:
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
我想做的是减去它们得到值,但是它们使用的是alias,所以当我这样做的时候 VALOR_EST_EMPENHO - VALOR_LIQ_BRUTO
它使我产生以下错误:
消息207,16级,状态1,第23行
列名“valor_est_empenho”无效
我该怎么做?
1条答案
按热度按时间dfddblmv1#
两件事:
语句有else路径的情况。最好将其设置为0以避免合并。
按照其他人的建议,可以重复coalesce(sum())指令以获得所需的结果。不过,为了可读性,我知道你是从哪里来的。
从cross apply语句得到的内联表是为每一行计算的。在执行时,查询将扩展内联表中使用的列,因此有效地,这将导致查询包含更多case-when语句。
我希望这有帮助。