带有两个DISTINCT语句的SQL

时间:2013-08-18 13:09:20

标签: sql oracle

SELECT DISTINCT CSSC_MASTER_VIEW."Created_by",
                SUM (CSSC_MASTER_VIEW.NO_OF_LINES_PROCESSED),
                CSSC_MASTER_VIEW.TYCO_CALENDAR_MONTH_NM,
                CSSC_MASTER_VIEW.TYCO_CALENDAR_YEAR_ID,
                CSSC_MASTER_VIEW."Source_ID"
  FROM CCO.CSSC_MASTER_VIEW CSSC_MASTER_VIEW
 WHERE     (CSSC_MASTER_VIEW."Created_by" = 'TE160961')
       AND (CSSC_MASTER_VIEW.TYCO_CALENDAR_MONTH_NM = 'JULY')
       AND (CSSC_MASTER_VIEW.TYCO_CALENDAR_YEAR_ID = 2013)
       AND (CSSC_MASTER_VIEW."Source_ID" = '10')
GROUP BY CSSC_MASTER_VIEW."Created_by",
         CSSC_MASTER_VIEW.NO_OF_LINES_PROCESSED,
         CSSC_MASTER_VIEW.TYCO_CALENDAR_MONTH_NM,
         CSSC_MASTER_VIEW.TYCO_CALENDAR_YEAR_ID,
         CSSC_MASTER_VIEW."Source_ID"

此查询返回NO_OF_LINES_PROCESSED为199,这是绝对正确的。 当我尝试使用另一个表加入此语句时出现问题。

我有另一个名为CSSC_QUALITY_DATA的表,其中包含“Created_by”字段和其他字段。当我在这个字段和CSSC_MASTER_VIEW之间创建连接。“Created_by”时,NO_OF_LINES_PROCESSED返回与我的第一个结果199不匹配。

我知道原因。第二个表有多个“Created_by”字段。我如何在这两个表之间建立关系

1 个答案:

答案 0 :(得分:1)

我认为你只需要一个关于JOIN的ON子句,如下所示:

JOIN CSSC_QUALITY_DATA ON CSSC_MASTER_VIEW."Created_by" =  CSSC_QUALITY_DATA."Created_by"

最后,为了避免在GROUP BY子句中你需要区分的所有内容:

GROUP BY CSSC_MASTER_VIEW."Created_by",
         CSSC_QUALITY_DATA."Created_by",

通过这种方式,您可以避免使用distinct,并使用Group BY获得相同的所需结果。