比较重复值并在LIKE上删除基数

时间:2014-12-17 00:49:30

标签: sql distinct sql-like

这是一个很好的。

我差不多完成但遇到了障碍。我试图组合两个字段,然后使用LIKE语句比较数据。这很容易。正如您在示例中看到的,我现在有多个具有多个CardNumbers的FullName。我需要保留唯一的FullName,但如果有重复,只保留带有' 23'的那个。所以在底部ZUNIGA RAMIREZ JOSE ANTONIO有2条记录,我只想保留' 230803'。但是VELAZQUEZ MARTINEZ YAZMIN只有一首以#21;'开头的记录,我也想保留它。

希望我很清楚。

SELECT Distinct 
   [Lastname]+' '+[Firstname] as FullName
  ,[CardNumber]
  ,[Status]
  FROM [AxiomData].[dbo].[vwCardholders]
  Where [Status] > 0 AND [CardNumber] LIKE '2%'
  ORDER BY FullName ASC;

示例:

FullName                      CardNumber
SOTO SOSA HUGO                  205962
SOTO SOSA HUGO                  234429
TELLO MACIAS ALEJANDRO          230841
TORRES PONCE IVAN               234346
TORRES PONCE IVAN               205889
TRUJILLO ARCE ALBERTO           234337
TRUJILLO ARCE ALBERTO           205881
VALDIVIA HERNANDEZ BENJAMIN     230830
VARGAS ANAYA JHONATAN           205853
VAZQUEZ CALDERON MARICARMEN     205838
VAZQUEZ CALDERON MARICARMEN     234289
VAZQUEZ PINEDA PAUL             234253
VAZQUEZ PINEDA PAUL             205805
VELAZQUEZ MARTINEZ YAZMIN       210165
VILLAFUERTE MEJIA EMMANUEL      234169
VILLAFUERTE MEJIA EMMANUEL      205731
VILLAGOMEZ MAYA PEDRO           234166
YAÑEZ ESTRADA GERARDO VALENTIN  205709
ZUÑIGA RAMIREZ JOSE ANTONIO     230803
ZUÑIGA RAMIREZ JOSE ANTONIO     209588

1 个答案:

答案 0 :(得分:0)

您可以使用条件聚合执行此操作。 。 。长条件:

SELECT [Lastname]+' '+[Firstname] as FullName, 
       (case when sum(case when CardNumber like '23%' then 1 else 0 end) > 0
             then max(case when CardNumber like '23%' then CardNumber end)
             else max(CardNumber)
        end) as CardNumber
FROM [AxiomData].[dbo].[vwCardholders]
Where [Status] > 0 AND [CardNumber] LIKE '2%'
GROUP BY [Lastname]+' '+[Firstname]
ORDER BY FullName ASC;