当我尝试通过ODBC提取数据时,出现此SQL脚本的语法错误,我不知道如何/为什么

当我尝试通过ODBC提取数据时,出现此SQL脚本的语法错误,我不知道如何/为什么

问题描述:

我正在运行以下脚本,但遇到错误。它基本上是两个独立脚本的组合。所以我认为其中一个JOIN已关闭,但不知道在哪里。我正在通过winsql中的ODBC从我们的ERP中提取数据。当我尝试通过ODBC提取数据时,出现此SQL脚本的语法错误,我不知道如何/为什么

此外,我将如何添加月份?也许一些东西:

TO_CHAR(Month(t.TRANDATE,'YYYY-MM-DD')) AS CreatedMonth 

已经得到了问题的查询是:

SELECT 
    t.TRANSACTION_TYPE AS TranType 
    ,tl.ACCOUNT_ID AS AcctId 
    ,a.NAME AS Account 
    ,a.TYPE_NAME AS AcctType 
    ,t.TRANSACTION_ID AS DCOGSTranId 
    ,t.TRANID AS DCOGSNo 
    ,TO_CHAR(t.TRANDATE,'YYYY-MM-DD') AS DCOGSCreateDt 
    ,TO_CHAR(t.TRANDATE,'YYYY-MM-DD') AS CDate 
    ,t.CREATED_BY_ID AS DCOGSCreatedById 
    ,tl.SUBSIDIARY_ID AS SubSidId 
    ,ss.NAME AS SubSidiary 
    ,tl.LOCATION_ID AS LocId 
    ,t.ENTITY_ID AS CustomerId 
    ,tl.ITEM_ID AS ItemId 
    ,NVL(SUM(tl.GROSS_AMOUNT),0) AS DirectCOGS$ 
    ,NVL(SUM(tl.ITEM_COUNT),0) AS DirectCOGSQty 
    ,ilm.ITEM_ID AS ItemId 
    ,ss.NAME AS SubSidiary 
    ,ilm.LOCATION_ID AS LocId 
    ,TO_CHAR(ed.ExpireDt,'YYYY-MM-DD') AS ExpireDt 
    ,TO_CHAR(CURRENT_DATE,'YYYY-MM-DD') AS CDate 
    ,NVL(ilm.AVERAGE_COST,0)*NVL(u.CONVERSION_RATE,1) AS AvgCost 
    ,NVL(ilm.LAST_PURCHASE_PRICE,0)*NVL(u.CONVERSION_RATE,1) AS LastPurchPrice 
    ,NVL(ilm.AVERAGE_COST,0) * NVL(ilm.ON_HAND_COUNT,0) AS OnHandCost$ 
    ,NVL(ilm.ON_HAND_COUNT,0)/NVL(u.CONVERSION_RATE,1) AS OnHandQty 
    ,NVL(bin.BinOnHandQty,0)/NVL(u.CONVERSION_RATE,1) AS BinOnHandQty 
    ,NVL(ilm.AVERAGE_COST,0) * (NVL(ilm.IN_TRANSIT_COUNT,0)) AS InTranCost$ 
    ,NVL(ilm.IN_TRANSIT_COUNT,0)/NVL(u.CONVERSION_RATE,1) AS InTranQty 
    ,NVL(ilm.AVERAGE_COST,0) * (NVL(ilm.AVAILABLE_COUNT,0)) AS AvailCost$ 
    ,NVL(ilm.AVAILABLE_COUNT,0)/NVL(u.CONVERSION_RATE,1) AS AvailQty 
    ,NVL(bin.BinAvailQty,0)/NVL(u.CONVERSION_RATE,1) AS BinAvailQty 
    ,NVL(ilm.AVERAGE_COST,0) * (NVL(ilm.ON_ORDER_COUNT,0)) AS OnOrderCost$ 
    ,NVL(ilm.ON_ORDER_COUNT,0)/NVL(u.CONVERSION_RATE,1) AS OnOrderQty 
    ,NVL(ilm.AVERAGE_COST,0) * (NVL(ilm.QUANTITYBACKORDERED,0)) AS BackOrdrdCost$ 
    ,NVL(ilm.QUANTITYBACKORDERED,0)/NVL(u.CONVERSION_RATE,1) AS BackOrdrdQty 
FROM TRANSACTIONS t 
JOIN TRANSACTION_LINES tl ON t.TRANSACTION_ID = tl.TRANSACTION_ID 
LEFT JOIN ITEMS i ON tl.ITEM_ID = i.ITEM_ID 
LEFT JOIN TRANSACTIONS t2 ON t.CREATED_FROM_ID = t2.TRANSACTION_ID 
LEFT JOIN ACCOUNTS a ON tl.ACCOUNT_ID = a.ACCOUNT_ID 
LEFT JOIN SUBSIDIARIES ss ON tl.SUBSIDIARY_ID = ss.SUBSIDIARY_ID 
WHERE tl.ACCOUNT_ID = 128 
FULL OUTER JOIN ITEM_LOCATION_MAP ilm ON tl.ITEM_ID = ilm.ITEM_ID 
JOIN ITEMS i ON ilm.ITEM_ID = i.ITEM_ID 
LEFT JOIN UOM u ON i.PURCHASE_UNIT_ID = u.UOM_ID 
LEFT JOIN PRIMARY_SUBSIDIARYS_MAP psm ON ilm.ITEM_ID = psm.ITEM_ID 
LEFT JOIN SUBSIDIARIES ss ON psm.SUBSIDIARY_ID = ss.SUBSIDIARY_ID 
LEFT JOIN (
    SELECT ITEM_ID, LOCATION_ID, MIN(EXPIRATION_DATE) AS ExpireDt FROM INVENTORY_NUMBER 
    WHERE EXPIRATION_DATE IS NOT NULL 
    GROUP BY ITEM_ID, LOCATION_ID) ed ON ilm.ITEM_ID = ed.ITEM_ID AND 
    ilm.LOCATION_ID = ed.LOCATION_ID 
LEFT JOIN (
    SELECT ITEM_ID, LOCATION_ID, SUM(ON_HAND_COUNT) AS BinOnHandQty, 
    SUM(AVAILABLE_COUNT) AS BinAvailQty 
    FROM BIN_NUMBER_COUNTS 
    GROUP BY ITEM_ID, LOCATION_ID) bin ON ilm.ITEM_ID = bin.ITEM_ID AND 
    ilm.LOCATION_ID = bin.LOCATION_ID 
    WHERE (ilm.ON_HAND_COUNT != 0 OR ilm.IN_TRANSIT_COUNT != 0 OR 
    ilm.ON_ORDER_COUNT != 0 OR ilm.QUANTITYBACKORDERED != 0) 
GROUP BY 
    t.TRANSACTION_TYPE 
    ,tl.ACCOUNT_ID 
    ,a.NAME 
    ,a.TYPE_NAME 
    ,t.TRANSACTION_ID 
    ,t.TRANID 
    ,t.TRANDATE 
    ,t.CREATED_BY_ID 
    ,tl.SUBSIDIARY_ID 
    ,ss.NAME 
    ,tl.LOCATION_ID 
    ,t.ENTITY_ID 
    ,tl.ITEM_ID 
+2

请张贴您的错误。 – MKR

真的应该张贴的错误是什么来帮助我们...但

LEFT JOIN SUBSIDIARIES ss ON tl.SUBSIDIARY_ID = ss.SUBSIDIARY_ID 
WHERE tl.ACCOUNT_ID = 128 
FULL OUTER JOIN ITEM_LOCATION_MAP ilm ON tl.ITEM_ID = ilm.ITEM_ID 

更换与AND在哪里。

其中是一个单独的子句,而不是连接语句的一部分。您可以使用和键1 =键1和键2 =键2和键3 ='嗨'

+0

啊,好的,谢谢。我对SQL和Stack都是新手,所以我会记下协议。它返回的错误不是非常有用的信息,因此该帖子。这很简单:“SQL语法错误” – user8611472