Werte Berechnen in MS SQL

Philippe

Neuer Benutzer
Beiträge
2
Hallo zusammen

Ich beschäftige mich erst seit kurzem mit SQL Abfragen und bin nun an ein Problem gestossen, bei dem ich nicht mehr weiter komme.

Ich habe eine Tabelle mit 4 Spalten Maschine, MeterID, Increment und Faktor. Jede Zeile sollte mit Increment x Faktor berechnet werden. Bei der Maschine 715 und 615 soll die Werte der Zeile mit der MeterID 69 verwendet werden und bei der Maschine 515 die Zeile mit der MeterID 53.
Als Resultat sollte jede einzelne Zeile erscheinen und zu unters das Total.
Geht das mit eine Case Abfrage?

Vielen Dank für Eure Hilfe.

Freundliche Grüsse

Philippe
 

Anhänge

  • Tabelle.jpg
    Tabelle.jpg
    50,7 KB · Aufrufe: 4
Werbung:
Hallo

Vielen Dank das du dich so schnell gemeldet hast. Ich habe eine Spalte in der Tabelle unterschlagen. Es gibt noch eine Spalte die den Hersteller angibt. Die MeterID 53 wird nur bei Hersteller SHF verwendet und bei allen anderen Herstellern wird die MeterID 69 verwendet.

Gruss Philippe
 
Code:
test=*# select * from philippe ;
 maschine | meterid | increment | faktor | hersteller
----------+---------+-----------+--------+------------
      715 |       1 |       456 |    0.1 | a
      715 |       2 |        43 |    0.1 | b
      715 |       3 |      5843 |    0.1 | c
      715 |      53 |       434 |    0.1 | d
      715 |      69 |     25432 |    0.1 | e
      615 |       1 |       434 |      1 | f
      615 |       2 |       434 |      1 | g
      615 |       3 |       543 |      1 | h
      615 |      53 |     15635 |      1 | i
      615 |      69 |        63 |      1 | j
      515 |       1 |      4165 |    0.5 | k
      515 |       2 |      4353 |    0.5 | l
      515 |       3 |       153 |    0.5 | m
      515 |      53 |      5185 |    0.5 | SHF
      515 |      69 |     51535 |    0.5 | n
(15 rows)

test=*# with x1 as (select maschine, increment, meterid, hersteller, faktor, row_number() over (partition by maschine order by case when hersteller = 'SHF' then 0 else 1 end, meterid desc) from philippe where meterid in (53,69)) (select maschine::text, increment * faktor as berechnung from x1 where row_number = 1 order by maschine desc) union all (select 'Summe', sum(increment*faktor) from x1 where row_number = 1);
 maschine | berechnung
----------+------------
 715      |     2543.2
 615      |         63
 515      |     2592.5
 Summe    |     5198.7
(4 rows)

test=*#

Ist mit PostgreSQL gemacht, sollte aber portierbar sein.

Kaffee!
 
Werbung:
Zurück
Oben