2014-02-18 72 views
1

我在T-SQL下面的查詢:使用具有GROUP BY CASE

SELECT dbo.table2.device, 
    dbo.table2.CREATETIME AS create_time, 
    CASE WHEN dbo.table1.ACTIONID = 1 
     THEN dbo.table1.startstop 
    END AS start_time, 
    CASE WHEN dbo.table1.ACTIONID = 2 
     THEN dbo.table1.startstop 
    END AS stop_time, 
    dbo.table2.collect_time 
FROM dbo.table2 
JOIN dbo.table1 ON dbo.table1.CREATETIME = dbo.table2.CREATETIME; 

......這給了我一個結果表與幾行,每重複一次用的開始 - 一旦最終時間(SQL時間 - 縮短爲簡單起見) - 另一個是NULL - 如:

device | create_time | start_time | stop_time | collect_time 
1  | 0000001  | 0000001 | NULL  | 0000001 
1  | 0000001  | NULL  | 0000002 | 0000001 

我希望將這兩行(與CREATE_TIME爲ID),所以我讓他們進入一個....謝謝!

回答

1

可以聚集(SUM)這些列:

SELECT dbo.table2.device, 
    dbo.table2.CREATETIME AS create_time, 
    SUM(CASE WHEN dbo.table1.ACTIONID = 1 
     THEN dbo.table1.startstop ELSE 0 
    END) AS start_time, 
    SUM(CASE WHEN dbo.table1.ACTIONID = 2 
     THEN dbo.table1.startstop ELSE 0 
    END) AS stop_time, 
    dbo.table2.collect_time 
FROM dbo.table2 
JOIN dbo.table1 ON dbo.table1.CREATETIME = dbo.table2.CREATETIME 
GROUP BY dbo.table2.device, dbo.table2.CREATETIME, dbo.table2.collect_time; 
+0

這是它...偉大的,謝謝! – Chris

0

我也想使用子查詢將制定以及

SELECT 
X.Device 
,sum(X.start_time) 
,sum(X.stop_time) 
,X.collect_time 
from(
SELECT dbo.table2.device, 
    dbo.table2.CREATETIME AS create_time, 
    CASE WHEN dbo.table1.ACTIONID = 1 
     THEN dbo.table1.startstop 
    END AS start_time, 
    CASE WHEN dbo.table1.ACTIONID = 2 
     THEN dbo.table1.startstop 
    END AS stop_time, 
    dbo.table2.collect_time 
FROM dbo.table2 
JOIN dbo.table1 ON dbo.table1.CREATETIME = dbo.table2.CREATETIME) AS X 
group by 
X.Device, X.collect_time 
+0

我可能會比較這兩個版本的性能...感謝您的輸入! – Chris