针对一个表的SQL查询,显示重复字段值的计数

时间:2012-04-19 20:16:58

标签: sql join group-by

我有一个包含5个字段的表。其中两个字段将具有匹配的重复值。我想我需要使用一个或两个JOINS来获得我想要的数据结果。

字段:Machine, Message, Date, Severity, ID

具有重复项的两个字段是Machine和Message。

示例数据:

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

我一直在努力寻找答案但未找到答案。我相信我需要加入一两个可能的GROUP BY

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:0)

我不明白完整的问题但看起来你正在寻找SQL中的一个转向功能,根据机器上的不同错误(1,2,3)聚合你的结果。

假设是MSSQL?因此,查询基于您希望聚合的3个错误的假设。

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