2015-10-20 3 views
0

Я очень новичок в SQL и пишу скрипт для транзакций, которые происходят до 30/7/2015. Я получил сообщение об ошибке - Неправильный синтаксис рядом с ключевым словом «ГДЕ».Ошибка синтаксиса в SQL, где статья

Что я делаю неправильно?

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 
Смежные вопросы