2012-04-19 55 views
0

我有一個包含5個字段的表。其中兩個字段將具有匹配的重複值。我想我需要使用一個或兩個JOINS來獲得我想要的數據結果。針對顯示重複字段值計數的一個表的SQL查詢

領域:Machine, Message, Date, Severity, ID

兩個領域,將有重複的機械和消息。

實例數據:

MACHINE | MESSAGE 
-------------------- 
MACHINE1 | ERROR1 
MACHINE2 | ERROR1 
MACHINE3 | ERROR1 
MACHINE2 | ERROR2 
MACHINE2 | ERROR2 
MACHINE3 | ERROR3 
MACHINE1 | ERROR3 
MACHINE1 | ERROR1 

我需要的結果是這樣的:

MACHINE1, 2 - ERROR1, 1 - ERROR3 

MACHINE2, 1 - ERROR1, 2 - ERROR2 

MACHINE3, 1 - ERROR1, 1 - ERROR3 

我一直在試圖尋找這個問題的答案,但還沒有找到答案。我相信我需要JOIN或兩個可能的GROUP BY

+0

我不明白預期的結果是什麼。這三排?例如,「MACHINE1,2」是什麼意思? – 2012-04-19 20:22:08

+0

好的,我重新格式化了您的消息,現在它有道理......或者我認爲:) – 2012-04-19 20:27:16

+0

這是什麼SQL方言? MySQL的? SQL Server? – 2012-04-19 20:28:27

回答

1
create table #machineErrors (Machine nvarchar(20), Error nvarchar(20)) 

insert into #machineErrors values ('Machine1','Error1') 
insert into #machineErrors values ('Machine2','Error1') 
insert into #machineErrors values ('Machine3','Error1') 
insert into #machineErrors values ('Machine2','Error2') 
insert into #machineErrors values ('Machine2','Error2') 
insert into #machineErrors values ('Machine3','Error3') 
insert into #machineErrors values ('Machine1','Error3') 
insert into #machineErrors values ('Machine1','Error1') 

select Machine, COUNT(*), [Error] 
from #machineErrors 
group by Machine, [Error] 
order by Machine, [Error] 
0

我不明白完整的問題,但似乎你正在尋找一個基於SQL的旋轉功能來聚合你的結果基於不同的錯誤(1,2,3)在機器上。

假設是MSSQL?所以查詢是基於假設你想要聚合的3個錯誤。

SELECT Machine, [Error1], [Error2], [Error3] 
FROM 
    MessageTable 
Pivot 
(
    COUNT(Machine) 
    FOR ErrorColumn 
    IN ([Error1], [Error2], [Error3]) 
)