2012-04-19 56 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]) 
)