#sql-server #tsql #syntax-error
#sql-сервер #tsql #синтаксическая ошибка
Вопрос:
Требуется помощь с синтаксической ошибкой оператора t-sql. Полный оператор, как показано ниже. Использование sqlcmd на sql-server 2005.
-- oitm to oitg is a 1 to 1 link via the 64 matching columns
select g.[ItmsGrpNam], b.[ItmsGrpNam], count(1)
from oitg g
join (select distinct
i.ItmsGrpCod as [ItmsGrpCod],
i.QryGroup1 as [QryGroup1],
i.QryGroup2 as [QryGroup2]
from oitm i) p -- pseudo intersect table for oitg-oitm links
join oitb b on b.[ItmsGrpCod] = p.[ItmsGrpCod]
where (g.ItmsGrpNam in -- translate interect to oitg names
(select x.ItmsGrpNam from oitg x where x.ItmsTypCod=1 and p.[QryGroup1]='Y')
)
group by g.ItmsGrpNam, b.ItmsGrpNam
Результаты до сих пор.
select g.[ItmsGrpNam], b.[ItmsGrpNam], count(1)
from oitg g
join (select distinct
i.ItmsGrpCod as [ItmsGrpCod],
i.QryGroup1 as [QryGroup1],
i.QryGroup2 as [QryGroup2]
from oitm i) p -- pseudo intersect table for oitg-oitm links
join oitb b on b.[ItmsGrpCod] = p.[ItmsGrpCod]
Эта часть инструкции выдает следующую ошибку.
Сообщение 102, уровень 15, состояние 1, сервер, строка 10
Неправильный синтаксис рядом с ‘ItmsGrpCod’.
И select в приведенном выше операторе возвращает, как и должно быть.
3> select distinct
4> i.ItmsGrpCod as [ItmsGrpCod],
5> i.QryGroup1 as [QryGroup1],
6> i.QryGroup2 as [QryGroup2]
7> from oitm i
8> go
ItmsGrpCod QryGroup1 QryGroup2
---------- --------- ---------
100 N N
101 N Y
102 N Y
103 N Y
104 N Y
105 N Y
106 N Y
107 N N
108 N N
108 Y N
110 N Y
111 N N
112 N Y
113 N N
Пробовали заменить «join» на «inner join». Начали заключать имена столбцов в квадратные скобки.
ItmsGrpCod — это fk между oitm и oitb с тем же именем. (не всегда так в SAP land!)
Для тех, кто заинтересован, это моя попытка кодирования вокруг недостатка дизайна SAP B1 для oitm (элементы заказа) в oitg (свойства элемента) без пересечения таблицы.
Ответ №1:
Вам не хватает on
инструкции для вашего первого соединения. Возможно, что-то вроде этого:
-- oitm to oitg is a 1 to 1 link via the 64 matching columns
select g.[ItmsGrpNam], b.[ItmsGrpNam], count(1)
from oitg g
join (select distinct
i.ItmsGrpCod as [ItmsGrpCod],
i.QryGroup1 as [QryGroup1],
i.QryGroup2 as [QryGroup2]
from oitm i) p -- pseudo intersect table for oitg-oitm links
on g.ItmsGrpCod = p.ItmsGrpCod
join oitb b on b.[ItmsGrpCod] = p.[ItmsGrpCod]
where (g.ItmsGrpNam in -- translate interect to oitg names
(select x.ItmsGrpNam from oitg x where x.ItmsTypCod=1 and p.[QryGroup1]='Y')
)
group by g.ItmsGrpNam, b.ItmsGrpNam
Комментарии:
1. выберите g. [ItmsGrpNam], b.[ItmsGrpNam], count(1) из oitg g join (выберите distinct i.ItmsGrpCod как [ItmsGrpCod], i.QryGroup1 как [QryGroup1], i.QryGroup2 как [QryGroup2] из oitm i) p — таблица псевдопересекания для ссылок oitg-oitm на (g.ItmsGrpNam в — translate взаимодействует с именами oitg (выберите x.ItmsGrpNam из oitg x, где x.ItmsTypCod=1 и p.[QryGroup1]=’Y’) ) присоединитесь к oitb b на b.[ItmsGrpCod] = p.[ItmsGrpCod] группируйте по g.ItmsGrpNam, b.ItmsGrpNam
2. Ого! Пока не очень хорошо с редактированием. Нажмите return, и он сохранится. В любом случае, да, переместите предложение where вверх как предложение on и работает. Исходя из фона MySQL и уверен, что я мог бы получить это в любом случае. В любом случае, большое спасибо.
Ответ №2:
Можете ли вы опубликовать схему для этих таблиц? Есть ли в oitb столбец ItmsGrpCod? SQL Server довольно известен плохими отчетами об ошибках, но обратите внимание, что вы используете ItmsGrpCod четыре раза в запросе.
Комментарии:
1. Хороший момент. У меня есть файл справки 2.5M, но я переименовал его во что-то более значимое … пытаюсь найти ссылку сейчас. В основном это ссылка на таблицу SAP B1 SDK 8.81.chm.
2. SDK_EN.chm
3. Будучи новичком в t-sql, я надеюсь, что синтаксическую ошибку легко найти опытным пользователям t-sql.