2017-05-04 35 views
0

我有一個複雜的查詢,它提供如下輸出。在SQL查詢中按日期時間總計選定的行並按組查詢

Name Date  Value1 Value2 
D 1493803432 12 14 
S 1493803432 20 22 
T 1493803432 24 42 
D 1493803424 20 15 
S 1493803424 30 23 
T 1493803424 65 42 
D 1493804556 22 11 
S 1493804556 45 23 
T 1493804556 55 24 

我希望的輸出是將行添加到兩行或更多行的總和中。 和分組日期字段,樣本如下。

Name Date Value1 Value2 
D 1493803432 12 14 
S 1493803432 20 22 
T 1493803432 24 42 
TS 1493803432 44 64 
D 1493803424 20 15 
S 1493803424 30 23 
T 1493803424 65 42 
TS 1493803424 95 65 
D 1493804556 22 11 
S 1493804556 45 23 
T 1493804556 55 24 
TS 1493804556 100 57 

我能夠做到工會,但不能按日期分組。所以TS是不包括D和個別日期字段的T &的總和。

+0

你是正確的 – D14

回答

1

我想你可以試試這個:

SELECT NAME, DATE, VALUE1, VALUE2 
FROM <your complex query> 
UNION ALL 
SELECT 'TS' AS NAME, DATE, SUM(VALUE1) AS VALUE1, SUM(VALUE2) AS VALUE2 
FROM <your complex query> 
WHERE NAME IN ('T','S') 
GROUP BY DATE 
ORDER BY DATE, NAME 
+0

我試過它不起作用 – D14

+0

有什麼錯誤? – etsa

+0

我試過rextester,它的工作原理...你確定你正確插入了<你的複雜查詢>嗎? – etsa

0

您可以使用查詢類似如下:

SELECT Name, Date, Value1, Value2, 1 AS grp 
FROM mytable 

UNION ALL 

SELECT 'TS' AS Name, Date, 
     SUM(CASE WHEN Name IN ('T', 'S') THEN Value1 ELSE 0 END) AS Value1, 
     SUM(CASE WHEN Name IN ('T', 'S') THEN Value2 ELSE 0 END) AS Value2, 
     2 AS grp 
FROM mytable 
GROUP BY Date, grp 
ORDER BY Date, grp 

查詢使用條件聚集爲了各組總結'T''S'記錄。字段grp是由ORDER BY子句使用的數字字面量,以實現期望的輸出。

Demo here

+0

我很高興地看到了演示,但它拋出錯誤。 「發生錯誤」 – D14

+0

@ D14演示的工作原理,我不知道您的實際數據/查詢。 –

0

嘗試爲

SELECT name, 
     date_col, 
     TO_NUMBER (value1), 
     TO_NUMBER (value2) 
    FROM my_table2 
UNION 
    SELECT 'TS' name, 
     (date_col), 
     SUM (CASE WHEN name IN ('T', 'S') THEN value1 ELSE '0' END) value1, 
     SUM (CASE WHEN name IN ('T', 'S') THEN value2 ELSE '0' END) value2 
    FROM my_table2 
GROUP BY date_col 
ORDER BY date_col, name