【问题标题】:Can´t use GROUP BY after WHERE clause into subquery不能在 WHERE 子句后使用 GROUP BY 进入子查询
【发布时间】:2017-10-06 19:19:58
【问题描述】:

我有这个问题:

left JOIN 
(SELECT * FROM ##TTA TT WHERE (TT.TAXCODE LIKE 'IVA0A' OR  TT.TAXCODE LIKE 'IVA0EXPT')) TT
GROUP BY TT.DATAAREAID, tt.VOUCHER, TT.MAINACCOUNTID 
AS TTIVA0A ON Asiento.Asiento = TTIVA0A.VOUCHER 
AND Asiento.Cuenta = TTIVA0A.AD
AND Asiento.Empresa = TTIVA0A.DATAAREAID

问题在于我得到的 GROUP BY 子句:

关键字“GROUP”附近的语法不正确。

有人能解释一下为什么我不能在WHERE 子句之后使用GROUP BY 吗?

【问题讨论】:

  • 请包含整个查询。查询不以LEFT JOIN 开头
  • 因为您的 group by 在您的子查询之外。移动括号,这不再是问题。
  • 我没有看到 WHERE -- 我看到了一个连接。在GROUP BY 之前需要ON,否则会出现错误

标签: sql sql-server


【解决方案1】:

如果您在格式化时更加小心,这将非常明显。

这是您的代码,分组依据在正确的位置。

left JOIN 
(
    SELECT * 
    FROM ##TTA TT 
    WHERE TT.TAXCODE LIKE 'IVA0A' 
        OR  TT.TAXCODE LIKE 'IVA0EXPT'
    GROUP BY TT.DATAAREAID
        , TT.VOUCHER
        , TT.MAINACCOUNTID 
) AS TTIVA0A ON Asiento.Asiento = TTIVA0A.VOUCHER 
    AND Asiento.Cuenta = TTIVA0A.AD
    AND Asiento.Empresa = TTIVA0A.DATAAREAID

【讨论】:

  • 最好注意子查询的编写方式 (SELECT *) 它假定 TT.DTAREAID 和 TT.VOUCHER,以及 TT MAINACCOUNTID 是表中唯一的列,或者这仍然不会工作
  • 同意@Matt。那里有很多事情我可能会做一些不同的事情(并且安全)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
  • 2021-05-05
相关资源
最近更新 更多