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

此查询仍返回右表中的两行。对 SQL 来说相当新,并且在语句中挣扎。任何帮助,将不胜感激。

4

1 回答 1

0

如果没有看到您的数据,很难判断问题可能出在哪里,因此我将提供一些可能有所帮助的建议。

首先,您正在加入 a LEFT JOINon thePRODDTA.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 回答