Member 10146034 Ответов: 1

Запрос доступа не работает в SQL , неправильный синтаксис рядом с "группой"


Всем Привет

Я занят преобразованием запросов доступа для sql server, но не понимаю, почему этот вариант не работает..
SELECT
	(T1.Debit) As Debit,
	(T1.Credit) As Credit,
	(T1.Debit - T1.Credit) As Balance,
	T1.CustCode
FROM
	(
SELECT
	SUM(AverageDebit) As Debit,
	SUM(AverageCredit) As Credit,
	CustCode
FROM
	(
SELECT
	(IIF(TransactionType IN (0,
	6,
	9,
	10,
	11,
	14,
	16,
	17,
	18,
	19,
	21),
	ABS(Price1) ,
	0)) AS AverageDebit,
	(IIF(TransactionType IN (1,
	2,
	3,
	7,
	15,
	22),
	ABS(Price1),
	0)) AS AverageCredit,
	CustCode,
	TransactionType
FROM
	TransactionHeader
WHERE
	CustCode = 'AA0001'
GROUP BY
	CustCode,
	TransactionType,
	Price1,
	ID)
GROUP BY
	CustCode) As T1



Есть какие-нибудь предложения, что не так с этим запросом ?

Спасибо

Что я уже пробовал:

Удаление группы по,

попробовал еще несколько модификаций ,

Я попробовал следующее , И это работает, не знаю, если это то же самое, что и доступ один Тхо

SELECT
	(T1.Debit) As Debit,
	(T1.Credit) As Credit,
	(T1.Debit - T1.Credit) As Balance,
	T1.CustCode
FROM
	(
SELECT
	SUM(AverageDebit) As Debit,
	SUM(AverageCredit) As Credit,
	CustCode
FROM
	(
SELECT
	(IIF(TransactionType IN (0,
	6,
	9,
	10,
	11,
	14,
	16,
	17,
	18,
	19,
	21),
	ABS(Price1) ,
	0)) AS AverageDebit,
	(IIF(TransactionType IN (1,
	2,
	3,
	7,
	15,
	22),
	ABS(Price1),
	0)) AS AverageCredit,
	CustCode,
	TransactionType
FROM
	TransactionHeader
WHERE
	CustCode = 'AA0001'
GROUP BY
	CustCode,TransactionType,Price1
	)AS TS2 GROUP BY TS2.CustCode ) As T1

David_Wimbley

Какова точная ошибка, которую вы получаете? Это что-то вроде (это sql server) столбец " недопустим в списке выбора, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

Кроме того, если это одноразовый запрос или если вы можете это сделать, то, похоже, у вас есть 2 глубоких запроса к субтаблицам, которые также могут быть частью проблемы (вы не публиковали схему, и я не пытался воссоздать ее), поэтому, если вы можете, вы можете рассмотреть возможность использования временной таблицы для загрузки данных и массирования их там, а не создавать огромный запрос. Это может облегчить работу, но я ничего не знаю о вашем проекте.

1 Ответов

Рейтинг:
1

Maciej Los

Что ж... Я не уверен, что вы можете использовать IIF вместе с IN.

Вы должны использовать ПЕРЕКЛЮЧАТЕЛЬ[^]

ABS(Switch([TransactionType]=0,[Price1],[TransactionType]=6, [Price1], ...and so on...))

или АиФ[^], но по-другому:
ABS(IIF([TransactionType]=0 OR [TransactionType]=6 OR ..., [Price1], 0))


Наконец, я упрощу ваш запрос таким образом:
SELECT Src.CustCode, Src.Debit, Src.Credit, Src.Debit - Src.Credit AS Balance
FROM (
    SELECT CustCode, SUM(ABS(IIF([TransactionType]=0 OR [TransactionType]=6 OR ..., [Price1], 0))) AS Debit, 
        SUM(ABS(IIF([TransactionType]=1 OR [TransactionType]=2 OR ..., [Price1], 0))) AS Credit
    FROM TransactionHeader
    WHERE CustCode = "AA0001"
    GROUP BY CustCode
) AS Src;


Попробуй!