2012-10-25 34 views
0

我有一個表的數據如下:GROUP BY逗號分隔的成員名單

t1 
____________________________________________________ 
resources   | companyName | Response | Score 
David, Matt  | companyA | YES  | 5 
Matt    | compqanyB | NO  | 8 
Kyle, Kyle, David | companyC | YES  | 2 

正如你所看到的,resources是一個逗號分隔的字符串。此外,並非resources的所有成員都必須是唯一的(請參見第3行)。

我想GROUP BY任何列表中提供每個DISTINCT成員。所有其他列將被彙總。

預期的結果:

query 
______________________________________________________________________________ 
resources  | companyName  | Response   | Score 
David   | *agregated result* | *agregated result* | *agregated result* 
Matt   | *agregated result* | *agregated result* | *agregated result* 
Kyle   | *agregated result* | *agregated result* | *agregated result* 

編輯:

另一種可能性:

query 
____________________________________________________ 
resources   | companyName | Response | Score 
David    | companyA | YES  | 5 
Matt    | companyA | YES  | 5 
Matt    | compqanyB | NO  | 8 
Kyle    | companyC | YES  | 2 
David    | companyC | YES  | 2 
+1

我不認爲你可以用純SQL做到這一點,但它不應該在任何編程語言(PHP,Java等) –

+0

我使用這個報告的服務太困難了,所以我試圖直接進入數據庫。如果我不需要,我寧願不使用中間人。但如果這是不可能的,那麼我想我必須這樣做。 –

+0

你可以在SQL中完成,但你必須使用遊標。這更像是一個真正的編程語言的SQL模仿,所以我寧願不去那裏。 – amphibient

回答

3

讓我假設你有資源的表格與個人的名字。在這種情況下,你可以做你想做用下面的查詢內容:

select r.name, <other aggregated results> 
from t1 join 
    Resources r 
    on concat(', ', t1.resources, ', ') like concat(', %', r.name, ', %') 
group by r.name 

如果你沒有資源的表,你應該。將這些東西存儲在逗號分隔的列表中通常是一個糟糕的主意。如果數據沒有正常化,並且出現拼寫錯誤,這是一個特別糟糕的想法。

+0

不幸的是,我被這個數據庫困住了。我沒有創建它。我相信我有一個資源名稱表。讓我試試這個。 –

+0

這太棒了。謝謝。 –