0

右側のテーブルで MAX ドキュメントを取得しようとしています。

SELECT   F43.PDDOCO, 
     F43.PDSFXO, 
     F43.PDLNID,
     F43.PDAREC/100 As Received, 
     F431.PRAREC/100,
     max(F431.PRDOC)

FROM     PRODDTA.F43121 F431
     LEFT OUTER JOIN PRODDTA.F4311 F43
      ON 
          F43.PDKCOO=F431.PRKCOO 
      AND F43.PDDOCO=F431.PRDOCO 
      AND F43.PDDCTO=F431.PRDCTO 
      AND F43.PDSFXO=F431.PRSFXO 
      AND F43.PDLNID=F431.PRLNID 
WHERE   F431.PRDOCO = 401531
and     F431.PRMATC = 2
and     F43.PDLNTY = 'DC'

Group by 

     F43.PDDOCO, 
     F43.PDSFXO, 
     F43.PDLNID,
     F43.PDAREC, 
     F431.PRAREC/100

このクエリは、まだ右側のテーブルの 2 つの行を返しています。SQLにかなり慣れておらず、ステートメントに苦労しています。どんな助けでも大歓迎です。

4

1 に答える 1

0

あなたのデータを見ないと、問題がどこにあるのかを判断するのは難しいので、役立つ可能性のあるいくつかの提案を提供します.

まず、LEFT JOIN上で結合してPRODDTA.F4311いますが、WHERE句にそのテーブルのフィルターがあります。F43.PDLNTY = 'DC'を JOIN 条件に移動する必要があります。これにより、クエリがINNER JOIN.

次に、サブクエリを使用してMAX(PRDOC)値を取得してみてください。次に、グループ化する列を制限して、重複を排除できます。クエリは次のようになります。

SELECT F43.PDDOCO, 
  F43.PDSFXO, 
  F43.PDLNID,
  F43.PDAREC/100 As Received, 
  F431.PRAREC/100,
  F431.PRDOC
FROM PRODDTA.F43121 F431
INNER JOIN
(
  -- subquery to get the max
  -- then group by the distinct columns
  SELECT PDKCOO, max(PRDOC) MaxPRDOC
  FROM PRODDTA.F43121
  WHERE PRDOCO = 401531
    and PRMATC = 2
  GROUP BY PDKCOO
) f2
  -- join the subquery result back to the PRODDTA.F43121 table
  on F431.PRDOC = f2.MaxPRDOC
  AND F431.PDKCOO = f2.PDKCOO
LEFT OUTER JOIN PRODDTA.F4311 F43
  ON F43.PDKCOO=F431.PRKCOO 
  AND F43.PDDOCO=F431.PRDOCO 
  AND F43.PDDCTO=F431.PRDCTO 
  AND F43.PDSFXO=F431.PRSFXO 
  AND F43.PDLNID=F431.PRLNID 
  AND F43.PDLNTY = 'DC'  -- move this filter to the join instead of the WHERE
WHERE F431.PRDOCO = 401531
  and F431.PRMATC = 2

テーブル構造といくつかのサンプル データを提供すると、問題の特定が容易になります。

于 2013-04-04T04:18:27.780 に答える