2016-05-17 9 views
0

Ich habe zwei Tabellen t1 und t2. Ich brauche den aggregierten Wert von "COUNT" und die Zeit in einer dritten Tabelle von jeder dieser Tabellen.Daten einfügen bei Join mit sql

t1:

COUNT    TIME_AH 
2     17-MAY-16 12:00:00 
3     17-MAY-16 12:00:00 
2     17-MAY-16 12:00:00 
12     17-MAY-16 12:00:00 
2     17-MAY-16 12:00:00 
12     17-MAY-16 12:00:00 

t2:

COUNT  TIME_ZH 
1   17-MAY-16 12:00:00 
22   17-MAY-16 12:00:00 
3   17-MAY-16 12:00:00 
4   17-MAY-16 12:00:00 

t3:

OUTPUT_TABLE 

COUNT_AH COUNT_ZH TIME_AH 
19   30   17-MAY-16 12:00:00 

ich den Code unten versucht, aber seine falsche Ausgabe geben.

select sum(t1.count), sum(t2.count), sysdate 
from t1, 
    t2 
where TIME_AH = (trunc(sysdate,'hh')); 

Bitte helfen.

+0

Wenn Sie einige Zeitstempel auf andere Werte einstellen, werden die Beispieldaten viel machen Der Sinn beschreibt das Problem! – jarlh

Antwort

0

Sie können dies mit einem UNION anstelle eines JOIN und einem CASE EXPRESSION:

SELECT SUM(CASE WHEN f.timetype = 'AH' THEN f.count else 0 END) as count_ah, 
     SUM(CASE WHEN f.timetype = 'ZH' THEN f.count else 0 END) as count_zh, 
     sysdate 
FROM(
    SELECT t.count,t.time_ah,'AH' as TimeType FROM t1 t 
    UNION ALL 
    SELECT s.count,s.time_zh,'ZH' FROM t2 s) f 
WHERE f.TIME_AH = trunc(sysdate,'hh'); 
0

versuchen auf diese Weise

select sum(t.a),sum(t.b),t.sysdate from (
select sum(t1.count) as a, 0 as b, sysdate 
from t1 
where TIME_AH = (trunc(sysdate,'hh')) 
union all 
select 0 as a, sum(t2.count) as b, sysdate 
from t2 
where TIME_AH = (trunc(sysdate,'hh'))) as t group t.sysdate