2011-11-04 111 views
1

需要t-sql語句語法錯誤的幫助。按照以下完整陳述。 SQL服務器2005年t-sql語句語法錯誤

-- 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 

發現迄今在 使用SQLCMD。

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] 

這部分的語句給出了以下錯誤。 Msg 102,Level 15,State 1,Server,Line 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是oitm和oitb之間的fk,並且名稱相同。 (並不總是這種情況在SAP的土地!)

對於那些有興趣這是我的嘗試圍繞SAP B1設計缺陷的oitm(訂購商品) oitg(項目屬性)沒有相交表地獄。

回答

0

您錯過了第一次加入的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

選擇克。[ItmsGrpNam],B [ItmsGrpNam],計數(1) 從oitg克 加入(選擇不同 i.ItmsGrpCod爲[ItmsGrpCod], i.QryGroup1爲[QryGroup1], i.QryGroup2如[qryGroup2] from oitm i)p - oitg-oitm鏈接的僞相交表 [QryGroup1] ='Y') ) 將b上的oitb b加入[ItmsGrpCod] = p。[ItmsGrpCod] group by g.ItmsGrpNam,b.ItmsGrpNam –

+0

Doh!尚未編輯好。擊中回報並保存。無論如何,是將where子句作爲on子句移動並運行。來自MySQL背景,並確信我可以擁有任何方式。無論如何,非常感謝。 –

0

你可以發佈這些表的模式嗎? oitb是否有ItmsGrpCod列? SQL Server對於糟糕的錯誤報告而言是相當臭名昭着的,但請注意,您在查詢中使用了四次ItmsGrpCod。

+0

好點。我有2.5M的幫助文件,但我將其更名爲更具意義的內容......現在試圖找到鏈接。基本上它是SAP B1 SDK 8.81表reference.chm。 –

+0

[SDK_EN.chm](http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/702faa60-4ab6-2c10-0b91-80d4fd923a76) –

+0

作爲t-sql的新手我希望語法錯誤對於有經驗的t-sql用戶很容易找到。 –