Avatar billede diyar Nybegynder
10. november 2011 - 11:51 Der er 9 kommentarer og
1 løsning

Oracle query

Jeg har en tabel i Oracle der er bygget på denne måde ( Se billede 1).
kolonnen NUMBER er unikt, jeg vil gerne lave en query der gøre følgende:

For hvert NUMBER hvor der findes en AMOUNT som er 0, så skal dens FEE ligges sammen med en anden FEE for samme NUMBER som har AMOUNT forskellig fra 0.

See Se billede 2 som viser resultat for Steen.
Tak på forhånd.
Avatar billede teepee Nybegynder
10. november 2011 - 12:16 #1
Skal det være et bestemt anden række eller er det lige meget hvilken række?  Har rækkerne en fortløbende ID eller måske en dato, som du ikke har vist?
Avatar billede diyar Nybegynder
10. november 2011 - 12:31 #2
Hej Teepee
Tak for hurtig svar.
Der er andre kolonner som jeg ikke har vist, men der er ikke en fartløbende ID eller dato.

NUMBER er unikt for hvert person.

Når en FEE er 0 indenfor et NUMBER, så skal den ligges sammen til en anden FEE indenfor samme NUMBER.

Det er ligegyldigt hvilket anden FEE, bare det er til den samme person/NUMBER.
Avatar billede teepee Nybegynder
10. november 2011 - 12:45 #3
Men du vil ikke bare have én række pr NUMBER hvor alle AMOUNT og FEE er summeret?
Avatar billede diyar Nybegynder
10. november 2011 - 12:53 #4
Nej :)
Avatar billede Slettet bruger
10. november 2011 - 23:34 #5
select Name, Number, Amount, Fee
from Tabel
where Fee != 0
union all
select Name, Number, sum(Amount) Amount, 0 "Fee"
from Tabel
where Fee = 0
group by Name, Number
Avatar billede diyar Nybegynder
14. november 2011 - 14:14 #6
Hej Rahp

Tak for dit svar, jeg tror at du mener sådan her:
select Name, Number, Amount, Fee
from Tabel
where Amount!= 0
union all
select Name, Number, 0 "Amount", sum(Fee) "Fee"
from Tabel
where Amount = 0
group by Name, Number;

Fordi det er Fee jeg vil have sumeret, men din query virker ikke helt. For Fee bliver ikke lagt sammen med en anden Fee som jeg ønsker. Det eneste der sker er at rækken med amount = 0 bliver fjernet. Det kan måske virker i tilfældet af at jeg har 2 amount som begge er 0.
Avatar billede kennie_np Nybegynder
23. november 2011 - 23:55 #7
Lyder umiddelbart som en underlig sql-opgave.

Dette kommer muligvis til at sutte performancemæssigt, hvis Tabel er stor, men anyway...


with zero_amounts as (
  select sum(fee) sum_fee, number
    from Tabel
  where amount = 0
  group by number
), number_of_rows as (
  select count(*) as antal, number
    from Tabel
  where amount > 0
  group by number
)
select t.name
    , t.number
    , t.amount
    , t.fee + nvl(z.sum_fee/n.antal, 0)
  from Tabel t
  left outer join number_of_rows n on (n.number = t.number)
  left outer join zero_amounts z on (z.number = t.number)
Avatar billede diyar Nybegynder
24. november 2011 - 09:14 #8
Hej kennie_np

Din query gør ikke helt det jeg vil have, men giver mig en idé om hvordan jeg kan komme videre med det.

Vær sød og smide et svar, så du kan få nogle point :).
Avatar billede kennie_np Nybegynder
24. november 2011 - 09:55 #9
godt at kunne hjælpe.

K
Avatar billede diyar Nybegynder
24. november 2011 - 10:16 #10
Du skal vælge Svar (til løsning og pointgivning) for at jeg kan tildele dig point. Altså ikke Kommentar.

Mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester