2010-11-25 51 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