2010-11-25 87 views
0

当我运行在单个表的SQL查询和这里的数据(这只是一个样本,误差列可能会超过10个)SQL查询中的列的多值多列(SQL 2005)

time total Error 

00:16 6 10000(E) 

00:20 4 10000(E) 

00:46 2 10000(E) 

01:01 2 10000(E) 

01:40 2 10000(E) 

02:07 2 10000(E) 

02:52 1 10000(E) 

04:27 2 10000(E) 

04:29 6 10000(E) 

04:32 4 10000(E) 

04:49 2 10000(E) 

04:50 2 10000(E) 

06:18 2 10000(E) 

09:04 1 10000(E) 

10:57 4 10000(E) 

10:58 4 10000(E) 

00:36 1 9401(E) 

00:37 1 9401(E) 

00:57 1 9401(E) 

00:58 1 9401(E) 

01:32 1 9401(E) 

01:33 1 9401(E) 

02:36 2 9401(E) 

03:05 1 9401(E) 

03:06 1 9401(E) 

09:53 2 9401(E) 

12:11 2 9401(E) 

12:12 4 9401(E) 

12:41 1 9401(E) 

我想写一个SQL查询,使我想这样

time 10000(E) 9401(E) 
--------------------------- 

00:16 6   0 

00:20 4   0 

00:36 0   1 

00:37 0   1 

00:46 2   0 

00:57 0   1 

00:58 0   1 

01:01 2   0 

01:32 0   1 

01:33 0   1 

01:40 2   0 

02:07 2   0 

02:36 0   2 

02:52 1   0 

03:05 0   1 

03:06 0   1 

04:27 2   0 

04:29 6   0 

04:32 4   0 

04:49 2   0 

04:50 2   0 

06:18 2   0 

09:04 1   0 

09:53 0   1 

10:57 4   0 

10:58 4   0 

12:11 0   2 

12:12 0   4 

12:41 0   1 

上面的数据是这样的可能吗?

+0

我们的意思是理解你在问什么?我不会说二进制,但。 = P – 2010-11-25 16:19:21

回答

0

这是否符合您的要求?

select e.time 
     , e.[10000(E)] 
     , e.[9401(E)] 
    from (
     select time 
       , SUM(case when Error LIKE N'10000(E)' then Total else NULL end) as [10000(E)] 
       , null as [9401(E)] 
      from MyTable 
      where Error LIKE N'10000(E)' 
      group by time 
     union 
     select time 
       , null as [10000(E)] 
       , SUM(case when Error LIKE N'9401' then Total else NULL end) as [9401(E)] 
      from MyTable 
      where Error LIKE N'9401(E)' 
      group by time 
    ) e 
order by e.time 

如果否,请告诉我有关结果,以便我可以提出正确的更正。

SUM函数只是将同一个错误的发生次数分组到time,这实际上似乎就是您在表中的含义。所以,它不应该修改任何数据。另一方面,如果同一时间你有两个不同的相同错误记录,那么它们应该按照这个time分组,并且这个错误的出现总数将被加入。

0

对于您的给定输入和输出,它可以像这样简单。

SELECT * 
FROM (
      SELECT time 
       , [10000(E)] = Total 
       , [9401(E)] = 0 
      FROM YourTable 
      WHERE Error = '10000(E)' 
      UNION ALL 
      SELECT time 
       , [10000(E)] = 0 
       , [9401(E)] = Total 
      FROM YourTable 
      WHERE Error = '9401(E)' 
     ) q 
ORDER BY 
     time