【问题标题】:SQL - Distinct with Case WhenSQL - 区分大小写
【发布时间】:2023-03-09 11:23:01
【问题描述】:

当我使用以下查询时,它返回重复的外部 ID,因为它将不同的情况列为不同的行。

SELECT DISTINCT

    OENT.OTHER_EXTERNAL_ID                                                                                                      AS 'Agent Master Number'       
   ,CASE WHEN SE.Organization_Name IS NULL OR RTRIM(LTRIM(SE.ORGANIZATION_NAME)) = '' THEN '' ELSE SE.ORGANIZATION_NAME END     AS 'Agent'

   GROUP BY

    OENT.OTHER_EXTERNAL_ID                                                                                              
    ,CASE WHEN SE.Organization_Name IS NULL OR RTRIM(LTRIM(SE.ORGANIZATION_NAME)) = '' THEN '' ELSE SE.ORGANIZATION_NAME END

我在哪里正确使用 distinct 以便无论它满足什么情况,它都会将 case 列为一行?

谢谢

问题是它不断返回

AGENT_NUMBER    AGENT

MA12348677  DREHWING, DOUGLAS

MA12348677  DREHWING, DOUGLAS A

我希望这是一行,因为它们具有相同的 AGENT_NUMBER

【问题讨论】:

  • 请添加正确的dbms标签
  • 如果你想计算任何不同的东西不是你的朋友
  • 对不起,计数是错误的词。我的意思是列表。
  • 不涉及表? (我没有看到 FROM 子句,可能只是格式不好......)
  • edit 您的问题并添加表的定义(如create table 语句)一些示例数据和基于该数据的预期输出。 Formatted 文本no screen shots

标签: sql


【解决方案1】:
select distinct
OENT.OTHER_EXTERNAL_ID AS AGENT_NUMBER,
CASE 
    WHEN SE.Organization_Name IS NULL OR RTRIM(LTRIM(SE.ORGANIZATION_NAME)) = '' THEN '' 
    ELSE upper( SE.ORGANIZATION_NAME )
END AS AGENT
FROM SomeTableName
order by AGENT_NUMBER

如果代理编号不同,它仍然会返回重复项。如果你想找到重复的名字,那么

select AGENT, count (AGENT_NUMBER) from (
    select OENT.OTHER_EXTERNAL_ID AS AGENT_NUMBER,
    CASE 
        WHEN SE.Organization_Name IS NULL OR RTRIM(LTRIM(SE.ORGANIZATION_NAME)) = '' THEN '' 
        ELSE upper( SE.ORGANIZATION_NAME )
    END AS AGENT
    FROM SomeTableName
    )
    group by AGENT
    HAVING count (AGENT_NUMBER) >1
    order by AGENT

要查找相同代理编号的重复名称:

select AGENT_NUMBER, count (AGENT) from (
    select OENT.OTHER_EXTERNAL_ID AS AGENT_NUMBER,
    CASE 
        WHEN SE.Organization_Name IS NULL OR RTRIM(LTRIM(SE.ORGANIZATION_NAME)) = '' THEN '' 
        ELSE upper( SE.ORGANIZATION_NAME )
    END AS AGENT
    FROM SomeTableName
    )
    group by AGENT_NUMBER
    HAVING count (AGENT) >1
    order by AGENT_NUMBER

【讨论】:

  • from 子句不是可选的
  • 更新了查询。如果您想查看每个代理的计数,可以删除 HAVING count (AGENT) >1
  • 在 FROM 之后第一次加入时显示错误。当使用连接时,我把括号放在哪里?
  • 您拥有哪个数据库?甲骨文?微软SQL?因为该查询是针对 Oracle 的。如果是 MSSQL,您必须将此行 FROM SomeTableName ) group by AGENT_NUMBER 更改为:FROM SomeTableName ) as Main group by AGENT_NUMBER
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 2016-08-28
  • 2012-05-13
  • 2015-07-05
相关资源
最近更新 更多