ошибка синтаксиса оператора t-sql

Нужна помощь с ошибкой синтаксиса инструкции t-sql. Полное заявление, как показано ниже. Использование sqlcmd на sql-сервере 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».

И выбор в приведенном выше выражении возвращается, как и должно быть.

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

Попробовали заменить «соединение» на «внутреннее соединение». Начали заключать имена столбцов в квадратные скобки. ItmsGrpCod — это fk между oitm и oitb и имеет то же имя. (не всегда так в стране SAP!)

Для тех, кто заинтересован, это моя попытка кодирования недостатка дизайна SAP B1 для oitm (элементы заказа) в oitg (свойства элемента) без пересечения ада таблиц.


person Gary Thomann    schedule 04.11.2011    source источник


Ответы (2)


Вам не хватает оператора 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
person Mikael Eriksson    schedule 04.11.2011
comment
выберите g.[ItmsGrpNam], b.[ItmsGrpNam], count(1) из oitg g join (выберите отдельный i.ItmsGrpCod как [ItmsGrpCod], i.QryGroup1 как [QryGroup1], i.QryGroup2 как [QryGroup2] из oitm i ) p -- таблица псевдопересечений для ссылок oitg-oitm на (g.ItmsGrpNam in -- транслировать пересечения в имена oitg (выберите x.ItmsGrpNam из oitg x, где x.ItmsTypCod=1 и p.[QryGroup1]='Y') ) присоединиться к oitb b в группе b.[ItmsGrpCod] = p.[ItmsGrpCod] с помощью g.ItmsGrpNam, b.ItmsGrpNam - person Gary Thomann; 04.11.2011
comment
Дох! С редактированием пока не очень. Нажмите «Возврат», и это сохранит. В любом случае, да, переместите предложение where вверх как предложение on и работает. Исходя из фона MySQL и уверен, что я мог бы получить его в любом случае. В любом случае большое спасибо. - person Gary Thomann; 04.11.2011

Можете ли вы опубликовать схему для этих таблиц? Есть ли в oitb столбец ItmsGrpCod? SQL Server довольно печально известен плохой отчетностью об ошибках, но обратите внимание, что вы используете ItmsGrpCod в запросе четыре раза.

person Norman    schedule 04.11.2011
comment
Хорошая точка зрения. У меня есть файл справки размером 2,5 МБ, но я переименовал его во что-то более значимое... сейчас пытаюсь найти ссылку. В основном это таблица SAP B1 SDK 8.81 reference.chm. - person Gary Thomann; 04.11.2011
comment
SDK_EN.chm - person Gary Thomann; 04.11.2011
comment
Будучи новичком в t-sql, я надеюсь, что синтаксическая ошибка будет легкой находкой для опытных пользователей t-sql. - person Gary Thomann; 04.11.2011