如何根据另一列中的重复项识别列中的不同值

时间:2017-11-25 04:28:30

标签: sql-server

我在表格中有三列:

  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和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),因为它没有重复。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这就是你想要的吗?

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