2013-02-18 59 views
0

這是我的第一篇文章。我想從每個人那裏尋求幫助,因爲我試圖找到解決問題的辦法。提取時間並轉換爲列然後按日期組

目前,我有這個數據

Date     Status 
----------------------- ------------- 
2013-01-02 08:49:31.000 A 
2013-01-02 18:03:29.000 B 
2013-01-03 08:54:59.000 A 
2013-01-03 18:04:43.000 B 
2013-01-04 08:53:26.000 A 
2013-01-04 18:08:43.000 B 

我想有這樣

Date      A    B 
----------------------- ------------ ------------ 
2013-01-02 00:00:00.000 08:49:31.000 18:03:29.000 
2013-01-03 00:00:00.000 08:54:59.000 18:04:43.000 
2013-01-04 00:00:00.000 08:53:26.000 18:08:43.000 

輸出我的電流輸出是什麼這個

Date     A    B 
---------------------- ------------ ------------------ 
2013-01-02 00:00:00.000 08:49:31.000 NULL 
2013-01-02 00:00:00.000 NULL   18:03:29.000 
2013-01-03 00:00:00.000 08:54:59.000 NULL 
2013-01-03 00:00:00.000 NULL   18:04:43.000 
2013-01-04 00:00:00.000 08:53:26.000 NULL 
2013-01-04 00:00:00.000 NULL   18:08:43.000 

我所做的行列查詢之前,但數據可以SUM,所以它很容易使它成爲一列,但這一個包含數據e和時間在同一個領域。

任何將不勝感激,TIA。

+2

你能顯示你的查詢嗎? – ntalbs 2013-02-18 03:48:56

+0

你能否用單詞來描述(除了提供例子)你想要達到的目標。如果有多個不匹配的As和Bs怎麼辦? – 2013-02-18 03:54:59

+0

@ntalbs,查詢非常簡單,我沒有使用任何子查詢。 – jma 2013-02-18 05:15:57

回答

1

試試這個

SELECT DATE_Field, 
MAX(CASE STATUS WHEN 'A' THEN Date_Time END) A, 
MAX(CASE STATUS WHEN 'B' THEN Date_Time END) B 
FROM 
(
SELECT CONVERT(Date,DateField,101) Date_Field, 
CONVERT(Time,DateField) Date_Time, Status 
FROM YourTable 
) v 
GROUP BY DATE_Field 
+0

它需要是一個varchar(10),因爲它使用4位數的年份和2/s。 – darin 2013-02-18 03:57:03

+0

感謝rs,解決了我的分組問題,感謝darin的輸入。 – jma 2013-02-18 05:14:12

0

你可以試試這個,你可能需要一個字符串,而不是轉換時間。不保證轉換是否正常工作...

select convert(varchar(10),isnull(a.Date,b.Date),101), 
    convert(time,a.Date) A, 
    convert(time,b.Date) B 
from table a 
inner join table b 
on convert(varchar(10),a.Date,101) = convert(varchar(10),b.Date,101) 
where a.Status = 'A' 
and b.Status = 'B' 
+0

謝謝達林,我欣賞這個輸入 – jma 2013-02-18 05:17:48

相關問題