0

このことを整理するのは本当に難しいです。FROM部分で可能なすべての組み合わせを試しましたが、うまくいかないようです。カンマを試し、内部結合と左結合を混合してから、これを試しました。

[ give some date pls]はパラメータプロンプト(MS Access 2007の場合のみ)なので、無視してください。

FROMの部分に何か問題があると書いてあります。

SELECT
    TJI.Serial AS ID,
    FIRST(TJI.Product) AS Product,
    ROUND((((SUM(TJI.JobOrder) * FIRST(TJI.ProductPackQTY)) - IIF(ISNULL(SUM(TJI.TheAmount)), 0, SUM(TJI.TheAmount))) / FIRST(TJI.STDYield)) / FIRST(TJI.MinBatch), 0) * FIRST(TJI.MinBatch) AS Batch,
    IIF(Batch <= 0, FIRST(MinBatch), Batch) AS FinalBatch

FROM TBL_JO AS TJ INNER JOIN (SELECT * FROM TBL_JOITEMS LEFT JOIN RET_STOCKS ON (Serial = TheItemSerial AND TJ.Date = TheDate) AS TJI ON TJ.Serial = TJI.JO_Serial

WHERE (TJ.Date = [give some date pls])
GROUP BY TJI.Serial
4

2 に答える 2

1

派生テーブルでどのように結合するかを推測する必要がありましたが、次の行で何かを試してください。

SELECT
TJI.Serial AS ID,
FIRST(TJI.Product) AS Product,
ROUND((((SUM(TJI.JobOrder) * 
    FIRST(TJI.ProductPackQTY)) - 
    IIF(ISNULL(SUM(TJI.TheAmount)), 0, SUM(TJI.TheAmount))) / 
    FIRST(TJI.STDYield)) / 
    FIRST(TJI.MinBatch), 0) * FIRST(TJI.MinBatch) AS Batch,

IIF(Batch <= 0, FIRST(MinBatch), Batch) AS FinalBatch

FROM TBL_JO AS TJ
INNER JOIN (SELECT * FROM TBL_JOITEMS j
            LEFT JOIN RET_STOCKS r
            ON j.Serial =r.TheItemSerial) AS TJI 

ON TJ.Serial = TJI.JO_Serial AND TJ.Date = TJI.TheDate
GROUP BY TJI.Serial

上記のようなエラーが発生し、SQLのどの部分も強調表示されていない場合は、常にサブクエリまたは派生テーブルを疑ってください。この場合、2つのテーブルを使用していますが、結合は関連するテーブルを参照していませんでした。さらに、派生テーブルに迷い括弧-(-があり、意味がありませんでした。

ところで、一般的に*を使用することは悪い考えと考えられています。関連するフィールド(列)に名前を付けるのが最善です。

于 2012-06-17T09:04:03.167 に答える
1

かなり長い間実験した後、私はついに私が探していた答えを見つけました。Remouに与えてくれたヒントに感謝します。それは確かに大きな助けです。

TBL_JOをRET_STOCKSと交換し、INNER JOINを使用する代わりに、WHEREを介して関係を定義する際に他の方法を使用しました。

SELECT JOSerial, JODate, PSerial, Product, Category, JobOrder, Yield, Pack, MinBatch, IIF(ISNULL(TheAmount),0,TheAmount) AS ReturnStocks
FROM
    (SELECT TJ.Serial AS JOSerial, TJ.Date AS JODate, TJI.Serial AS PSerial, TJI.Product AS Product, TJI.Category AS Category, TJI.JobOrder AS JobOrder, TJI.STDYield AS Yield, TJI.ProductPackQTY AS Pack, TJI.MinBatch AS MinBatch 
        FROM TBL_JO AS TJ, TBL_JOITEMS AS TJI
        WHERE TJ.Serial=TJI.JO_Serial)
AS TJX
LEFT JOIN
    RET_STOCKS AS RS
ON
    (TJX.JODate=RS.TheDate)
    AND
    (TJX.PSerial=RS.TheItemSerial)
于 2012-06-17T16:25:35.237 に答える