Ошибка синтаксиса оператора t-sql - PullRequest
1 голос
/ 04 ноября 2011

Нужна помощь с ошибкой синтаксиса оператора 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'.

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

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 Land!)

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

Ответы [ 2 ]

0 голосов
/ 04 ноября 2011

Вы пропустили оператор 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
0 голосов
/ 04 ноября 2011

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

...