2016-09-19 46 views
-1

我的表如何按此表分組?

PERSON | car type | color | make 
------------------------------------ 
mark | sedan |   | 
kevin | sedan |   | 
kevin |   | blue  | 
kevin |   |   | honda 
john |   | gray  | 
john |   |   | toyota 
charlie | suv  |   | 
charlie |   | orange | 
charlie |   |   | volvo 
charlie | sedan |   | 
charlie |   | blue  | 

我想小組它由人,但它不是一個GROUP BY表達式,

預期輸出

PERSON | car type | color | make 
------------------------------------ 
mark | sedan |   | 
kevin | sedan | blue | honda 
john |   | gray | toyota 
charlie | suv  | orange | volvo 
charlie | sedan | blue | 
+0

這不是在Oracle中存儲數據的方式。插入方式太多冗餘。相反,您可以刪除冗餘並在某個級別使其恢復正常。由於這種冗餘,簡單的查詢(你問)會花費更長的時間來處理數千或數百條記錄。 – Jack

+0

來自Charlie提供的數據,你怎麼知道suv是橙色的而轎車是藍色的,而不是相反的方向(suv是藍色的,轎車是橙色的)?你是否爲輸入表中的行的ORDER分配了任何含義?如果你這樣做,這是一個嚴重的錯誤(行不是有序的),除非有額外的數據或規則,你沒有與我們分享。請澄清(無論是在這裏還是在其他地方,您在同一天發佈的幾乎相同的問題)。 – mathguy

回答

0

,如果其他字段包含任何空白或只有一個值,那麼你可以安全地使用這個查詢。

 
select PERSON, max(car_type) as Car_type, max(color) as color, max(Make) as Make 
from YourTable 
group by PERSON 
+0

它有不同的值 –

1

我們想要的人列作爲唯一的組通過對人的名字列,但命名的紀錄查理兩次雙組合,這樣其不可能你要重命名列得到了輸出,我有這個解決在這sql fiddle檢查。

0

嘗試這種方式

Select a.person,a.car_type,b.color,c.Make from (
select PERSON, car_type 
From yourtable 
Group by Person,car_type 
) as a 
join (
select PERSON, color 
From yourtable 
Group by Person,color) as b on a.person=b.person 
join (
select PERSON, Make 
From yourtable 
Group by Person,Make) as c on a.person= c.person 
0

按我的理解,唯一可能的解決方案是,更新car_typecolormake列需要的地方,而不是有新的項目或有一個主鍵列。因爲,您無法將其他列值與您的預期輸出關聯起來(考慮人名charlie的示例)。這樣可以減少不必要的插入和總行數。