2017-05-05 11 views
1

ich eine sehr lange Liste, die wie die unten (anonymisiert Spaltennamen und Daten) sieht roughltRückkehr Mindest Zeilen für jede ID SQL

ID | ID2 | Value 
1 | 5 | 900 
1 | 7 | 400 
2 | 2 | 100 
2 | 8 | 800 
2 | 2 | 200 
3 | 4 | 100 
3 | 5 | 300 
4 | 8 | 750 
4 | 5 | 900 

Und ich, was bin ist, nachdem die Fähigkeit 1 Zeile pro Spalte zu machen "ID", die die Summe der Werte der niedrigsten ID2 hat.

Als Beispiel würde die obige Tabelle werden zu:

ID | ID2 | Value 
1 | 5 | 900 
2 | 2 | 300 
3 | 4 | 100 
4 | 5 | 900 

ich mehr Skript Variationen dieses ohne Erfolg versucht habe. Dies ist mein aktueller gereinigt Code:

SELECT res.id 
     , min(id2) as rdk 
     ,sum(value) 

    FROM x as res 

    left join y as clai 
    on res.id = clai.id 

    left join z as cal 
    on clai.col99 = cal.col99 

    group by 
     res.id 

jedoch die Summe für die „ID“ bis allem in Wert hinzufügt, nicht nur die niedrigste „ID2“?

Jede Hilfe wird geschätzt!

+0

Warum ist '2 | 2 | 300'? Sollte es nicht sein? 2 | 2 | 100'? –

+0

@KobyDouek es wäre 300, da es zwei Einträge mit einer ID = 2 und einem ID2 = 2 gibt, so summiert es die beiden Werte zusammen, wenn das sinnvoll ist? –

Antwort

0

dies ausprobieren:

select a.*,b.value from 
(select id,min(id2) as id2 
from have 
group by id) a 
left join 
(select id,id2,sum(value) as value 
from have 
group by id,id2) b 
on a.id=b.id and a.id2=b.id2; 

Meine Leistung:

id |id2 |value 
1 |5 |900 
2 |2 |300 
3 |4 |100 
4 |5 |900 

Bitte lassen Sie mich bei Fragen wissen.

+0

Vielen Dank für Ihre Hilfe :) –

+0

Gerne helfen :) –

1

Versuchen Sie folgendes: -

select a.ID,a.ID2, sum(Value) as Value 
from 
your_table_name a 
inner join 
(
SElect ID, min(ID2) as ID2 
from your_table_name 
group by ID 
) b 
on a.ID=b.ID and a.ID2=b.ID2 
group by a.ID,a.ID2; 

hoffe, das hilft :-)

+0

Vielen Dank für Ihre Hilfe :) –

0

Ich werde einfach meine Lösung hier lassen :)

with ExampleData as (
    select 1 ID1, 5 ID2, 900 Value union all 
    select 1 ID1, 7 ID2, 400 Value union all 
    select 2 ID1, 2 ID2, 100 Value union all 
    select 2 ID1, 8 ID2, 800 Value union all 
    select 2 ID1, 2 ID2, 200 Value union all 
    select 3 ID1, 4 ID2, 100 Value union all 
    select 3 ID1, 5 ID2, 300 Value union all 
    select 4 ID1, 8 ID2, 750 Value union all 
    select 4 ID1, 5 ID2, 900 Value) 

select ID1, 
     ID2, 
     Value 
from (
    select ID1, 
      ID2, 
      SUM(VALUE) VALUE, 
      ROW_NUMBER() OVER (partition by ID1 order by ID2) R 
    from ExampleData 
    group by ID1,ID2 
) T where T.R=1 
+0

Vielen Dank für Ihre Hilfe :) –

0

Wenn Ihre Tabelle t1 genannt wird:

SELECT t1.id, t1.id2, SUM(t1.value) 
FROM t1 INNER JOIN 
(
SELECT id, min(id2) minId 
FROM t1 
GROUP BY id 
) A 
ON A.id = t1.id AND A.minId = t1.id2 
GROUP BY t1.id, t1.id2 
+0

Vielen Dank für Ihre Hilfe :) –

Verwandte Themen