2015-10-20 113 views
0

我对SQL非常陌生,正在编写一个脚本来提取2015年9月30日之前发生的事务。我收到了错误消息 - 关键字'WHERE'附近的语法错误。SQL中的语法错误where子句

我在做什么错?

SELECT 
    T1.Account, 
T2.AcctName, 
    SUM(T1.Debit - T1.Credit) AS 'Balance', 
    Sum(T1.SysDeb - T1.SysCred) AS 'USDBalance' 
FROM OJDT T0 
INNER JOIN JDT1 T1 ON T0.TransId = T1.TransId 
Left Join OACT T2 ON T2.AcctCode = T1.Account 
GROUP BY 
T1.Account, T2.AcctName WHERE T1.Refdate <= '09-30-2015' 

回答

5

WHERE而来的GROUP BY前:

Select  T1.Account, 
      T2.AcctName, 
      Sum(T1.Debit - T1.Credit) As 'Balance', 
      Sum(T1.SysDeb - T1.SysCred) As 'USDBalance' 
From  OJDT T0 
Inner Join JDT1 T1 ON T0.TransId = T1.TransId 
Left Join OACT T2 ON T2.AcctCode = T1.Account 
Where  T1.Refdate <= '09-30-2015' 
Group By T1.Account, T2.AcctName 
+0

谢谢!这工作完美。我感谢您花时间回复 –

1

可以使用CROSS APPLY简化一些的GROUP BY的复杂性。在下面,这段代码执行并返回与上述答案相同的结果。

SELECT 
    balances.Account, 
    balances.AcctName, 
    balances.Balance AS 'Balance', 
    balances.USDBalance AS 'USDBalance' 
FROM OJDT T0 
CROSS APPLY (
    SELECT 
     SUM(T1.Debit - T1.Credit) AS Balance, 
     Sum(T1.SysDeb - T1.SysCred) AS USDBalance, 
     T1.Account AS Account, 
     T2.AcctName AS AcctName 
    FROM JDT1 T1 
    LEFT OUTER JOIN OACT T2 ON T2.AcctCode = T1.Account 
    WHERE T1.TransId = T0.TransId AND T1.Refdate <= '09-30-2015' 
) balances