Summenfeld aus einer Zeile in einem View

Hallo,

ich versuche mich an einer Datenbank zur Umlagenabrechnung von Gebäuden. Dabei möchte ich, dass alle relevanten Daten in einen View zusammengefaßt werden, aus dem später unter OpenOffice Serienbriefe erzeugt werden können. Nun zu meinem Problem:

Im View wird für jeden Mieter eine Zeile erzeugt, u.a. mit den zu zahlenden (Teil-)Beträgen für z.B. Wasser, Strom, Heizung… Diese Teilbeträge sollen nun in einer Spalte aufsummiert erscheinen. Ich müsste also, während der View aufgebaut wird, die entstehende Zeile oder den entstehenden View in einem SELECT-Befehl referenzieren können. Ist das möglich?

Oder muss ich eine leere Spalte erzeugen und diese anschließend mit den Summen füllen?

Vielen Dank für Eure Mithilfe

rolfS

hi,

wie wäres mit:

SELECT mitername, stromkosten, wasserkosten, (stromkosten + wasserkosten) AS summe FROM bla[...]

oder meinst du was anderes?

cu tb.

SELECT mitername, stromkosten, wasserkosten, (stromkosten + wasserkosten) AS summe FROM bla[…]

Das Problem liege bei bla. Postgres sagt immer (sinngemäß) “Table bla does not exists”. Ich kann wohl noch nicht auf die Tabelle zugreifen, während sie erstellt wird.

Kannst du uns mal den kompletten Query zeigen?

Anbei den Code zum Erstellen des Views.

DROP VIEW abrechnung;

CREATE VIEW abrechnung AS
   SELECT 
      -- Adressdaten holen
      (SELECT text FROM klassifikation WHERE id = m.anrede) AS anrede, name, vorname,

      (SELECT plz FROM gebaeude WHERE w.gebaeude = id) AS plz,
      (SELECT ort FROM gebaeude WHERE w.gebaeude = id) AS ort,
      (SELECT strasse FROM gebaeude WHERE w.gebaeude = id) AS strasse,

      -- Mietdauer fuer relative Anteile. Zahl 36 steht fuer 12 Monate von 3 Mietparteien.
      (SELECT mietmonate(m.id, 2005)/36) AS schluessel,

      -- Bestimmung der Personenanzahl im gegebenen Zeitraum.
      (SELECT personen FROM mieteumlage WHERE mieter = m.id) AS personen,

      -- Betraege, die aufs Konto ueberwiesen wurden
      (SELECT (einzahl(m.id, '2005-01-01', '2005-12-31') - miete * mietmonate(m.id, 2005)) FROM mieteumlage WHERE mieter = m.id) AS umlagenteil,
               einzahl(m.id, '2005-01-01', '2005-12-31') AS einzahlungen,

      -- Daten fuer Brandversicherung
      (SELECT kennung FROM rechnung WHERE haus = w.gebaeude AND umlegbar = 'TRUE' AND (bezahlt BETWEEN '2005-01-01' AND '2005-12-31') AND bemerkung ILIKE '%feuer%') AS brandv_rech,
      (SELECT SUM(betrag)*(mietmonate(m.id, 2005)/36) FROM rechnung WHERE haus = w.gebaeude AND umlegbar = 'TRUE' AND (bezahlt BETWEEN '2005-01-01' AND '2005-12-31') AND bemerkung ILIKE '%feuer%') AS brandver,

      -- Daten fuer allg. Strom
      (SELECT kennung FROM rechnung WHERE haus = w.gebaeude AND umlegbar = 'TRUE' AND (bezahlt BETWEEN '2005-01-01' AND '2005-12-31') AND bemerkung ILIKE '%strom%') AS strom_rech,
      (SELECT SUM(betrag)*(mietmonate(m.id, 2005)/36) FROM rechnung WHERE haus = w.gebaeude AND umlegbar = 'TRUE' AND (bezahlt BETWEEN '2005-01-01' AND '2005-12-31') AND bemerkung ILIKE '%strom%') AS strom,

      -- Daten fuer Haftpflichtversicherung
      (SELECT kennung FROM rechnung WHERE haus = w.gebaeude AND umlegbar = 'TRUE' AND (bezahlt BETWEEN '2005-01-01' AND '2005-12-21') AND firma = 5 LIMIT 1) AS versicher_rech,
      (SELECT SUM(betrag)*(mietmonate(m.id, 2005)/36) FROM rechnung WHERE haus = w.gebaeude AND umlegbar = 'TRUE' AND (bezahlt BETWEEN '2005-01-01' AND '2005-12-31') AND firma = 5) AS versicher,

      -- Daten fuer Schonsteinfeger
      (SELECT kennung FROM rechnung WHERE haus = w.gebaeude AND umlegbar = 'TRUE' AND (bezahlt BETWEEN '2005-01-01' AND '2005-12-21') AND firma = 6) AS schornst_rech,
      (SELECT SUM(betrag)*(mietmonate(m.id, 2005)/36) FROM rechnung WHERE haus = w.gebaeude AND umlegbar = 'TRUE' AND (bezahlt BETWEEN '2005-01-01' AND '2005-12-31') AND firma = 6) AS schornst,

      -- Daten fuer Rechnung von der Stadt
      (SELECT kennung FROM rechnung WHERE haus = w.gebaeude AND umlegbar = 'TRUE' AND (bezahlt BETWEEN '2005-01-01' AND '2005-12-21') AND firma = 8 group by kennung) AS stadt_rech,
      (SELECT SUM(betrag) FROM rechnung WHERE haus = w.gebaeude AND umlegbar = 'TRUE' AND (bezahlt BETWEEN '2005-01-01' AND '2005-12-31') AND firma = 8) AS stadt,

      -- Daten von den Wasseruhren
      (SELECT SUM(interval) FROM verbrauch WHERE mieter = m.id AND ablesedatum BETWEEN '2004-12-01' AND '2005-12-21' AND verbrauch = 1) AS wasserinterv,
      (SELECT SUM(differenz) FROM verbrauch WHERE mieter = m.id AND ablesedatum BETWEEN '2005-01-01' AND '2005-12-31' AND verbrauch = 1) AS wasserverbr,

      -- Grundsteuer
      (SELECT SUM(wert)*-1 FROM konto where bemerkung ilike '%grund%' and bemerkung ilike '%stadt borken%' and buchdatum between '2005-01-01' and '2005-12-31') as grundsteuer, 

      -- die Summe enthaelt auch Muelltonne.
      (select sum(betrag) from rechnung where firma = 8 and bemerkung ilike '%wasser%' and haus = w.gebaeude) as wasserkosten,

      (SELECT SUM(betrag) FROM rechnung WHERE haus = w.gebaeude AND umlegbar = 'TRUE' AND (bezahlt BETWEEN '2005-01-01' AND '2005-12-31')) AS gesmatkosten,

--      (select brandver+strom+versicher+schornst+stadt from abrechnung) as umlagensumme,

      -- Anzahl der Monate, fuer die Abgerechnet werden soll
      mietmonate(m.id, 2005) AS dauer FROM mieter AS m

      INNER JOIN wohnung AS w ON m.wohnung = w.id
      WHERE mietmonate(m.id, 2005) > 0 AND w.stockwerk != (SELECT id FROM klassifikation WHERE text = 'Garage')
        ;

COMMENT ON VIEW abrechnung IS 'Daten fuer Umlagenabrechnung.';

-- Testausgabe
SELECT * FROM abrechnung;

So läuft das Skript. Wird die Zeile

(select brandver+strom+versicher+schornst+stadt from abrechnung) as ...

auskommentiert, bekomme ich die Fehlermeldung

FEHLER:  Relation >>abrechnung<< existiert nicht

Vielen Dank für die Hilfe

Das Geheimnis an dieser Stelle ist wohl ein zweiter View :slight_smile: Macht alles einfacher.

Der erste VIEW genauso wie oben beschrieben nur ohne die Summenspalten und der zweite view gibt alle Spalten des ersten views aus und bildet die Summen :slight_smile: