Oracle:将相似的名称组合在一起

时间:2013-02-15 01:30:50

标签: sql oracle normalization

ItemNo  Name      Requested Qty
850045  MICHAEL         46  1045
850045  MICHAEL JACKSON 38  834
850045  LARRY SHEARIN   22  473
850045  Michael Jackson 11  233
850045  Larry           5   84

我有一张表,其中请求者名称未规范化。迈克尔和迈克尔杰克是同一个人。 Larry和Larry Shearin也是同一个人。有没有办法组合行数据,以便Requested和Qty也正确总结?我当时认为可能有某种Oracle功能或分析可以做到这一点......

ItemNo  Name      Requested Qty
850045  MICHAEL JACKSON 95  2112
850045  LARRY SHEARIN   27  557

1 个答案:

答案 0 :(得分:1)

可能有另一种方法,但这应该可以使用UPPER并将任何名字(没有空格)与任何全名(带空格)匹配 - 如果多个全名匹配,那么结果将是不准确的。

SELECT T.ItemNo, 
  T.Name, 
  T.Requested + T2.Requested Requested,
  T.Qty + T2.Qty Qty
FROM (
    SELECT ItemNo, UPPER(Name) as Name, SUM(Requested) Requested, SUM(Qty) Qty
    FROM YourTable
    WHERE Name LIKE '% %'
    GROUP BY ItemNo, UPPER(Name)
  ) T
  JOIN (
    SELECT ItemNo, UPPER(Name) as Name, SUM(Requested) Requested, SUM(Qty) Qty
    FROM YourTable
    WHERE Name NOT LIKE '% %'
    GROUP BY ItemNo, UPPER(Name)
  ) T2 ON T.ItemNo = T2.ItemNo AND T.Name LIKE T2.Name||' %' 

这是SQL Fiddle

以下是结果:

ITEMNO  NAME            REQUESTED  QTY
850045  MICHAEL JACKSON 95         2112
850045  LARRY SHEARIN   27         557

我猜你拉里的总数(32)是错误的(22 + 5)?

希望这有帮助。