2013-02-15 21 views
0
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 

我有一張表,請求者名稱未標準化。邁克爾和邁克爾傑克是同一個人。拉里和拉里謝林也是同一個人。有沒有一種方法可以合併行數據,這樣Requested和Qty也可以正確地總結出來?我想可能有某種功能的Oracle或分析會做到這一點的?Oracle:將類似的名稱組合在一起

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

他們的身份證應該放在那張表中,這樣就不會有任何變化。你不能確定這是一個人一直承載着邁克爾,它可能是指其他人......這就是現實 – codingbiz 2013-02-15 01:36:56

+0

我們正在研究通過loginid或電子郵件地址的第一部分規範化數據。幸運的是,重複項目的請求者往往是同一個人,所以這變得不是一個問題。感謝您的關注 - 這是一個有效的問題。 – Sun 2013-02-18 17:14:26

回答

1

有可能是另一種方式,但這應該使用上工作和匹配任何姓名(無空格)任何全名(有空格) - 如果多個全名匹配,你的結果將是不準確的。

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)是錯誤的?

希望這會有所幫助。

+0

我可以使用上部或下部函數來使名稱一致嗎? – Sun 2013-02-15 04:19:25

+0

@SunWKim - 是的,當然是:) - 看到編輯 - 漫長的一天,並正在考慮另一個項目。祝你好運。 – sgeddes 2013-02-15 05:30:54

+0

哇,那有效!太棒了,謝謝你。 – Sun 2013-02-18 17:14:57