2016-05-13 7 views
0

Ich versuche, die Summe von bestimmten SpalteOracle-Abfrage die Summe der Spalte für unterschiedliche Werte erhalten

Ich möchte Oracle Abfrage erhalten die Summe der Spalte „timespend“ für jede Szenarien (S_1, S_4 zu erhalten , S_5, S_8), in dem Name gleich ist nach B

name id scenario timespend 
A 123 S_1  2 
A 123 S_1  5 
A 123 S_3 6.3 
B 124 S_1 3 
B 124 S_1 8.9 
B 124 S_1 5 
B 124 S_1 4 
B 124 S_5 1.23 
B 124 S_5 56 
B 124 S_5 8 
B 124 S_8 9 
B 124 S_8 4 
C 125 S_8 6 
D 126 S_2 9 
D 126 s_4 5 
D 126 s_4 6.2 
D 126 s_4 7 
E 127 S_1 8 
E 127 S_1 1 

ich unten Abfrage verwendet haben seine aber mit Summe der Spalte timespend

select sum(timespend), 
     scenario 
from table1 
where scenario in ('s_1','s_3','s_4','s_5','s_8') 
and name = 'B' 
group by scenario 

Ausgabe der Abfrage Rückkehr ist

sum(timespend) scenario 
-------------- -------- 
154.63   s_1 
154.63   s_5 
154.63   s_8 

Erwartete Ausgabe ist

sum(timespend) scenario 
-------------- -------- 
20.9   s_1 
65.23   s_5 
19    s_8 

Kann mir jemand helfen, die erwartete Ausgabe zu erhalten, wie wie oben erwähnt?

+0

Können Sie bitte die Ausgabe Ihrer Abfrage und die Ausgabe, die Sie benötigen, posten? – Aleksej

+1

Sie wollen die Summe der Zeitspannen und Sie erhalten die Summe der Zeitspannen. Ich bin jetzt sehr verwirrt. –

+0

Ich habe meine Abfrage aktualisiert. Ich möchte die Summe der Zeitspannen für eine Reihe von Szenarien, die für Name B ähnlich aussehen. Aber ich bekomme Summe für alle Szenarien – surendar

Antwort

2

I (obwohl Ihre erwartete Ausgabe für Szenario S_8 falsch ist, und verwendeten Sie kleingeschrieben s in Ihrer where-Klausel) nicht ein Problem mit Ihrer Anfrage sehen:

with table1 as (select 'A' name, 123 id, 'S_1' scenario, 2 timespend from dual union all 
       select 'A' name, 123 id, 'S_1' scenario, 5 timespend from dual union all 
       select 'A' name, 123 id, 'S_3' scenario, 6.3 timespend from dual union all 
       select 'B' name, 124 id, 'S_1' scenario, 3 timespend from dual union all 
       select 'B' name, 124 id, 'S_1' scenario, 8.9 timespend from dual union all 
       select 'B' name, 124 id, 'S_1' scenario, 5 timespend from dual union all 
       select 'B' name, 124 id, 'S_1' scenario, 4 timespend from dual union all 
       select 'B' name, 124 id, 'S_5' scenario, 1.23 timespend from dual union all 
       select 'B' name, 124 id, 'S_5' scenario, 56 timespend from dual union all 
       select 'B' name, 124 id, 'S_5' scenario, 8 timespend from dual union all 
       select 'B' name, 124 id, 'S_8' scenario, 9 timespend from dual union all 
       select 'B' name, 124 id, 'S_8' scenario, 4 timespend from dual union all 
       select 'C' name, 125 id, 'S_8' scenario, 6 timespend from dual union all 
       select 'D' name, 126 id, 'S_2' scenario, 9 timespend from dual union all 
       select 'D' name, 126 id, 'S_4' scenario, 5 timespend from dual union all 
       select 'D' name, 126 id, 'S_4' scenario, 6.2 timespend from dual union all 
       select 'D' name, 126 id, 'S_4' scenario, 7 timespend from dual union all 
       select 'E' name, 127 id, 'S_1' scenario, 8 timespend from dual union all 
       select 'E' name, 127 id, 'S_1' scenario, 1 from dual) 
-- end of mimicking your table1 with data in it. See SQL below: 
select sum(timespend), 
     scenario 
from table1 
where scenario in ('S_1','S_3','S_4','S_5','S_8') 
and name = 'B' 
group by scenario 
order by scenario; 

SUM(TIMESPEND) SCENARIO 
-------------- -------- 
      20.9 S_1  
     65.23 S_5  
      13 S_8 

Vielleicht aus der Tatsache zu urteilen dass einige der Szenariodaten in Ihren Beispieldaten in Kleinbuchstaben sind und Sie erwähnt haben, dass Sie nach der set of scenarios that look similar gesucht haben, möchten Sie vielleicht stattdessen Folgendes?

select sum(timespend), 
     upper(scenario) scenario 
from table1 
where upper(scenario) in ('S_1','S_3','S_4','S_5','S_8') 
and name = 'B' 
group by upper(scenario) 
order by upper(scenario); 
+0

Ich habe Ergebnisse für die Abfrage unten erwartet. Danke sum (Zeitverschiebung), Szenario aus Tabelle1, wobei Name = 'B' und Szenario in ('S_1', 'S_3', 'S_4', 'S_5', 'S_8') Gruppe nach Szenario sortiert nach Szenario – surendar

+0

@surendar: Dies scheint dieselbe Abfrage zu sein, die Sie in Ihrer Frage gepostet haben. nicht wahr? – Aleksej

+0

@Aleksej sieht für mich so aus! Offensichtlich gibt es Gremlins in der Datenbank des OP oder so! * {;-) – Boneist