【问题标题】:Oracle Left join give duplicateOracle左连接给出重复
【发布时间】:2019-11-09 00:48:58
【问题描述】:

我正在尝试从 TRANS_TABLE 获取所有客户,无论他们是否有安装服务。

NOA- 查询仅获取 MAX 产品并通过电子邮件 ID 再次与 TRANS_TABLE 加入以获取所有 MAX 客户详细信息(无论他们是否通过添加 Y 或 N 来安装服务,但此查询也返回与 REP 产品重复的

下面是我的 Oracel 查询,它给出了重复的

with CTE as (SELECT NOA.*, 
       CASE 
         WHEN TRANS_TABLE.product_name LIKE '%Installation%' THEN 'Y' 
         ELSE 'N' 
       END AS Installaion ,
       ROW_NUMBER() OVER (PARTITION BY TRANS_TABLE.email_address ORDER BY TRANS_TABLE.email_address) AS rn

FROM   (SELECT DISTINCT email_address         
        FROM  TRANS_TABLE
        WHERE  email_address IS NOT NULL
and pdct_name like '%MAX%'      
               ) NOA 
       LEFT JOIN TRANS_TABLE 
              ON NOA.email_address = TRANS_TABLE.email_address 
              select * from cte where rn='1'

【问题讨论】:

  • 这个不清楚。使用足够多的单词、句子和对部分示例的引用来清楚完整地表达你的意思。 PS请use text, not images/links, for text--including tables & ERDs.转述或引用其他文本。仅将图像用于无法表达为文本或增强文本的内容。无法搜索或剪切和粘贴图像。在图像中包含图例/键和说明。使您的帖子自成一体。使用编辑功能插入图片/链接。
  • 请在代码问题中给出minimal reproducible example--剪切&粘贴&运行代码;具有期望和实际输出的示例输入(包括逐字错误消息);标签和明确的规范和解释。这包括您可以提供的最少代码,即您显示的代码可以通过您显示的代码扩展为不可以。 (调试基础。)对于包含 DBMS/产品和 DDL 的 SQL,其中包括约束和索引以及表格格式的基表初始化。请参阅How to Ask 和投票箭头鼠标悬停文本。

标签: oracle join duplicates


【解决方案1】:

以下代码会有所帮助:

CTE AS (
    SELECT
        NOA.*,
        CASE
            WHEN TRANS_TABLE.PDCT_NAME LIKE '%INSTALLATION%' THEN 'Y' -- case sensitive name is used
            ELSE 'N'
        END AS INSTALLAION,
        ROW_NUMBER() OVER(
            PARTITION BY TRANS_TABLE.EMAIL_ADDRESS
            ORDER BY
                TRANS_TABLE.EMAIL_ADDRESS
        ) AS RN
    FROM
        (
            SELECT DISTINCT
                PDCT_NAME,
                EMAIL_ADDRESS
            FROM
                TRANS_TABLE
            WHERE
                EMAIL_ADDRESS IS NOT NULL
                AND PDCT_NAME LIKE '%MAX%'
        ) NOA
        LEFT JOIN TRANS_TABLE ON NOA.EMAIL_ADDRESS = TRANS_TABLE.EMAIL_ADDRESS
        WHERE TRANS_TABLE.PDCT_NAME NOT LIKE '%REP%') -- added this WHERE condition
SELECT
   PDCT_NAME,  EMAIL_ADDRESS, INSTALLAION
FROM
    CTE
WHERE
    RN = '1'

db<>fiddle demo

干杯!!

【讨论】:

    猜你喜欢
    • 2018-05-23
    • 2016-10-02
    • 2015-08-02
    • 2020-09-28
    • 1970-01-01
    • 2018-07-31
    • 2011-12-22
    • 1970-01-01
    相关资源
    最近更新 更多