在连接中使用distinct

时间:2015-03-23 17:17:19

标签: join distinct

我仍然是SQL的新手,我需要运行一个JOINs 3表的报告。第三个表有我需要的字段的副本。所以我尝试加入一个独特的选项,但帽子不起作用。任何人都可以建议我可以使用正确的代码吗?

我的代码如下所示:

SELECT 
   C.CUSTOMER_CODE
, MS.SALESMAN_NAME
, SUM(C.REVENUE_AMT)

FROM C_REVENUE_ANALYSIS C
JOIN M_CUSTOMER MC ON C.CUSTOMER_CODE = MC.CUSTOMER_CODE
/* This following JOIN is the issue. */
JOIN M_SALESMAN MS ON MC.SALESMAN_CODE = (SELECT SALESMAN_CODE FROM M_SALESMAN WHERE COMP_CODE = '00')

WHERE REVENUE_DATE >= :from_date 
  AND REVENUE_DATE <= :to_date

GROUP BY C.CUSTOMER_CODE, MS.SALESMAN_NAME

我还尝试了另一种变体来获得DISTINCT。

/* I also tried this variation to get a distinct */

JOIN M_SALESMAN MS ON MC.SALESMAN_CODE = 
(SELECT distinct(SALESMAN_CODE) FROM M_SALESMAN)

请有人帮忙吗?我真的很感激。

提前致谢。

1 个答案:

答案 0 :(得分:0)

select distinct
    c.customer_code,
    ms.salesman_code,
    SUM(c.revenue_amt)
FROM
    c_revenue c,
    m_customer mc,
    m_salesman ms
where
    c.customer_code = mc.customer_code
    AND mc.salesman_code = ms.salesman_code
    AND ms.comp_code = '00'
    AND Revenue_Date BETWEEN (from_date AND to_date)
group by
    c.customer_code, ms.salesman_name

以上将返回客户代码,销售员代码和收入金额的任何明显组合,其中 c.CustomerCode与mc.customer_code匹配并且相同的mc记录与ms.salesman_code匹配并且ms记录具有comp_code为&#39; 00&#39;并且Revenue_Date位于from和to变量之间。然后,整个结果将按客户代码和销售员名称分组;唯一会导致重复出现的是SUM(收入)是否有所不同。

要解释一下,如果您只是直接加入,则不需要JOIN关键字。我发现它倾向于卷曲的东西;你只需要做一个&#34;奇怪的&#34;加入,就像LEFT / RIGHT加入一样。我不知道您的数据模型,所以上面的可能仍会返回重复项,但如果是这样,请告诉我。