Daten zusammenfassen und berechnen

Hallo zusammen,
ich habe mal wieder eine Idee im Kopf, kann sie aber leider nicht richtig umsetzen. Ich habe eine Tabelle mit Flächengrößen, die ich zusammenfassen möchte.

Ausgangstabelle:
Zeile | Grundstueck | Flurst. | Kategorie | Art | Fläche1 | Fläche2 | Fläche3
1 | 111111-222222-3333 | f1 | A |Wald | 100 | 101 | 101
2 | 111111-222222-3333 | f2 | A |Wald | 2000 | 2010 | 2010
3 | 111111-222222-3333 | f2 | B |Gew | 1100 | 1090 | 1090
4 | 111111-222222-4444 | f3 | A |Wald | 5000 | 5050 | 5050
5 | 111111-333333-1111 | f4 | B | Woh | 2000 | 2010 | 2010
6 | 111111-444444-1111 | f5 | A | Wald | 9000 | 8900 | 8900

Zieldaten nach Abfrage
Zeile | Grundbuch | Anzahl der Teilflächen | Sum Fl-A1 | Sum Fl-A2 | Sum Fl-B1 | Sum Fl-B1
1 | 111111-222222 | 4 | 8200 | 8251 | 1100 | 1090
2 | 111111-333333 | 1 | 2000 | 2010 | 2000 | 2010
2 | 111111-444444 | 1 | 9000 | 8900 | 0 | 0

Mein bisheriger Versuch bringt leider noch keinen Erfolg. Er berechnet die Wert mal X (wahrscheinlich mal Anzahl Teilflächen)

SELECT 
	SUBSTRING(t.grundstueck,1,13) as bvnr,
	COUNT(t.grundstueck) as anzahl_teilflaechen_in_bvnr,
	SUM(katA.flaeche_gb) as flaeche_gb_kat_a,
	ROUND(SUM(katA.flaeche_uhv)) as flaeche_uhv_kat_a,
	SUM(katB.flaeche_gb) as flaeche_gb_kat_b,
	ROUND(SUM(katB.flaeche_uhv)) as flaeche_uhv_kat_b
FROM gvis.gvis_teilflaeche t
JOIN
(
	SELECT
		ta.grundstueck,
		ta.alkis_id,
		ta.flaeche_gb,
		ta.flaeche_uhv
	FROM gvis.gvis_teilflaeche ta
) AS katA ON SUBSTRING(katA.grundstueck,1,13) = SUBSTRING(t.grundstueck,1,13) AND katA.alkis_id = t.alkis_id
JOIN
(
	SELECT
		tb.grundstueck,
		tb.alkis_id,
		tb.flaeche_gb,
		tb.flaeche_uhv,
		tb.kategorie
	FROM gvis.gvis_teilflaeche tb
) AS katB ON SUBSTRING(katB.grundstueck,1,13) = SUBSTRING(t.grundstueck,1,13) AND katB.alkis_id = t.alkis_id AND katB.kategorie = 'B'
WHERE t.alkis_id = 2022
GROUP BY SUBSTRING(t.grundstueck,1,13)
ORDER BY bvnr

Kann mir da jemand einen Tipp geben?
LG

So ganz kapiere ich die einzelnen Spalten des gewünschten Ergebnisses nicht (und ich auch nicht weiß wo alkis_id herkommt), aber ich denke eine filter() Bedingung müsste das eigentlich hinkriegen.

So was in der Art:

select substr(grundstueck,1,13) as grundstueck,
       count(*) as anzahl_teilflaechen_in_bvnr,
       sum(flaeche_1) filter (where kategorie = 'A') as flaeche_gb_kat_a
from gvis_teilflaeche
group by substr(grundstueck,1,13);
1 „Gefällt mir“

Hallo castorb,

vielen lieben Dank für Ihre schnelle Hilfe. Habe Ihre Abfrage so umgebaut, dass es jetzt passt. Ich wusste kannte bisher noch nicht den Filter Befehl.

SELECT 
	SUBSTRING(t.grundstueck,1,13) as grundbuch,
	COUNT(t.grundstueck) as anzahl_teilflaechen_in_grundbuch,
	SUM(t.flaeche_gb) as flaeche_gb_kat_a,
	ROUND(SUM(t.flaeche_uhv)) as flaeche_uhv_kat_a,
	SUM(t.flaeche_gb) FILTER (WHERE t.kategorie = 'B') as flaeche_gb_kat_b,
	ROUND(SUM(t.flaeche_uhv) FILTER (WHERE t.kategorie = 'B')) as flaeche_uhv_kat_b
FROM gvis.gvis_teilflaeche t
WHERE t.alkis_id = 2022
GROUP BY grundbuch
ORDER BY grundbuch

alkis_id ist wirklich nur eine ID Spalte zum filtern.
Die anderen Spalten bewirken folgendes:
Alle Flächengrößen sind automatisch ‘A’ und nur die Flächengrößen die ‘B’ sind bekommen einen Aufschlag anhand der Flächengröße ‘B’
Und FlächeGB ist die Grundbuchfläche lt. ALKIS und FlächeUhv ist die errechnete Fläche anhand der Geometrie.

LG

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.