将SQL多部分标识符转换为GrOUP BY子句

时间:2017-10-09 23:28:23

标签: sql sql-server

我有这样的左连接:

LEFT MERGE JOIN --IVA0A
( SELECT VOUCHER,DATAAREAID,ISNULL(VENDTRANSID,0)AS LJT, SUM(IIF(TAXITEMGROUP = 'ANTICIPOS',-1*TAXBASEAMOUNT,TAXBASEAMOUNT))AS TAXBASEAMOUNT,
SUM(IIF(TAXITEMGROUP = 'ANTICIPOS',-1*TAXAMOUNT,TAXAMOUNT)) AS TAXAMOUNT FROM 
##CPP TT
WHERE (
         (TT.TAXCODE LIKE 'IVA0A' OR  TT.TAXCODE LIKE 'IVA0AFA' OR  TT.TAXCODE LIKE 'IVA0AEXP') OR 
         (TT.TAXITEMGROUP = 'ANTICIPOS' AND (TT.TAXCODE LIKE 'IVA0AP' OR  TT.TAXCODE LIKE 'IVA0AFAP' OR  TT.TAXCODE LIKE 'IVA0AEXPP'))
      )
GROUP BY TT.VOUCHER,TT.DATAAREAID,ISNULL(LJT.VENDTRANSID,0)) 
AS TTIVA0A ON VT.VOUCHER = TTIVA0A.VOUCHER AND TTIVA0A.DATAAREAID = VT.DATAAREAID
and IIF(TTIVA0A.LJT=0,VT.RECID,TTIVA0A.LJT) = VT.RECID

问题是当我尝试使用GROUP BY子句

SQL返回:

  

无法绑定多部分标识符“LJT.VENDTRANSID”。

我无法理解为什么会这样,有人可以解释一下吗?此致

2 个答案:

答案 0 :(得分:0)

LJT是列ISNULL(VENTTRANSID,0)的别名。

我认为,如果你只给ISNULL(VENTTRANSID,0),在GROUP BY子句而不是ISNULL(LJT.VENTTRANSID,0)中,它将解决问题。

答案 1 :(得分:0)

我想你想按ISNULL(VENDTRANSID,0) AS LJT分组,因为你不能在LJT子句中使用别名WHERE,你应该使用表达式本身进行分组:

GROUP BY TT.VOUCHER, TT.DATAAREAID, ISNULL(VENDTRANSID,0)