【问题标题】:How to identify distinct values in a column based on duplicates in another column如何根据另一列中的重复项识别列中的不同值
【发布时间】:2017-11-25 04:28:29
【问题描述】:

我在一个表中有三列:

  Name  Ascii_Name  Alternate_names

  Abat     Abat1       Abat, Abat1
  Abayah   Abayah1     Abayah,Abayah1
  Abayah   Abayah1     Abayah,Abayah1
  Abat     Abat1       Abat, Abath
  Carne    Carnt       Carne, Carnt

对于值相同的 (Name and Ascii_Name) 对,我必须在 Alternate_names 中找到值不同的值。结果集必须包含 Alternate_Names,其中(Name 和 Ascii_Name)对至少重复两次。结果必须如下:

 Name   Ascii_Name  Alternate_names
  Abat     Abat1       Abat, Abat1
  Abat     Abat1       Abat, Abath

请注意,结果集不包含最后一行的值 (Carne Carnt Carne, Carnt),因为它没有重复。

【问题讨论】:

  • 这里不太明白你的逻辑。你能进一步解释一下吗?
  • @Squirrel 为了清楚起见,在描述中添加了更多信息。
  • 所以我发布的查询是否给了你想要的东西?

标签: sql-server


【解决方案1】:

通过查看从原始表中获得的结果集,我认为您希望找到名称和 Ascii_Name 相同但备用名称不同。请找到以下查询..

DECLARE @Collection TABLE(

    Name            VARCHAR(MAX),
    Ascii_Name      VARCHAR(MAX),
    Alternate_names VARCHAR(MAX)

)

---- Tempory table data insert
INSERT INTO @Collection VALUES  ('Abat','Abat1','Abat, Abat1'),
                                ('Abayah','Abayah1','Abayah,Abayah1'),
                                ('Abayah','Abayah1','Abayah,Abayah1'),
                                ('Abat','Abat1','Abat, Abath')

-- Solution
SELECT  col1.Name,
        col1.Ascii_Name,
        col1.Alternate_names 
FROM @Collection col1
INNER JOIN @Collection col2 ON col1.Name = col1.Name AND col1.Ascii_Name = col2.Ascii_Name 
WHERE col1.Alternate_names <> col2.Alternate_names

Try It

【讨论】:

  • 结果集必须包含 Alternate_Names,其中 (Name and Ascii_Name) 对至少重复两次。
  • @SreedharDanturthi - 因为您的问题结果集中的结果集将根据alternate_name重复2个或更多,请尝试rextester.com/CSFC1401
【解决方案2】:

这是你想要的吗?

select Name, Ascii_Name
from   yourtable
group by Name, Ascii_Name
having min(Alternate_names) <> max(Alternate_names)

【讨论】:

  • 为了清楚起见,在问题中添加了更多信息。
猜你喜欢
  • 2018-04-11
  • 2017-01-09
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
  • 2018-12-01
  • 2017-12-17
  • 1970-01-01
  • 2021-01-10
相关资源
最近更新 更多