Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

MS Query Abfrage aus Excel

Begonnen von Nafets1972, August 12, 2016, 18:42:08

⏪ vorheriges - nächstes ⏩

Nafets1972

Hallo an alle,

ich hoffe ihr könnt mir weiter helfen.

Ich hab 2 Tabellen in Access (hier auf das wesentliche Gekürzt)

Objekte






...ID-ObjektID-PosName...
11Haus 26 WE 1
12Haus 26 WE 2
13Haus 26 WE 3
21Mühlengasse 2

und Kosten hier nur ein kleiner Teil








...ID-ObjektID-PosKostenstelleBetrag...
1110008,22
11120024,20
11204011,28
12200015,85
1222003,12
12120055,50

Nun suche ich nach einer Abfrage aus Excel mit MS Query an Access (die Datenbank ist im Hintergrund einer Verwaltungssoftware, für die Jahresabrechnung tippe ich immer die Daten in eine Excel-Tabelle ich dachte das ginge einfacher wenn ich sie direct Abfrage)

Die mir in Abhängigkeit von ID-Objekt alle Datensätze mit zusammengerechneten Kostenstellen zurückgibt.

wenn ich nach ID-Objekt = 1 Suche benötige ich als Rückgabe






ID-PosNameWasserStromGasTelefon
1Haus 26 WE 115,2068,5505,87
2Haus 26 WE 214,2252,1237,2015,22
3Haus 26 WE 30000

Aus der Tabelle Objekte beziehe ich alle ID-Pos und den Namen des gesuchten ID-Objekt
aus Tabelle Kosten benötige ich
für Wasser die Summe aus Betrage mit der Kostenstelle (1000;1100;1200;...)
für Strom die Summe aus Betrage mit der Kostenstelle (2000;2100;...)
für Gas die Summe aus Betrage mit der Kostenstelle (3000;3030;...)
für Telefon die Summe aus Betrage mit der Kostenstelle (4000;...)

In Tabelle Objekte gibt es jede Wohnung nur 1 mal

In Tabelle Kosten kann es für jede Wohnung keinen Eintrag oder nur einen Eintrag (unvermietet eine Reparatur am Strom) oder viele Einträge (Vermietet) geben es sollen aber alle Wohnungen auch mit den Kosten 0 angezeigt werden


Ich hoffe ihr konntet meinen Angaben Folgen !

Danke Stefan

 


Lachtaube

Eine Abfrage in dieser Art sollte das Ergebnis herbeiführen.SELECT Min(K.[ID-Pos]) AS [ID-Pos],
       O.Name,
       IIf(K.Kostenstelle \ 1000 = 1, Sum(K.Betrag), 0) AS Wasser,
       IIf(K.Kostenstelle \ 1000 = 2, Sum(K.Betrag), 0) AS Strom,
       IIf(K.Kostenstelle \ 1000 = 3, Sum(K.Betrag), 0) AS Gas,
       IIf(K.Kostenstelle \ 1000 = 4, Sum(K.Betrag), 0) AS Telefon
  FROM [C:\Dein\Pfad\Zur\Datenbank].Kosten K,
       [C:\Dein\Pfad\Zur\Datenbank].Objekte O
WHERE K.[ID-Objekt] = O.[ID-Objekt] AND
       K.[ID-Pos] = O.[ID-Pos]
GROUP BY O.Name,
          K.Kostenstelle \ 1000;
Grüße von der (⌒▽⌒)

Nafets1972

So nach einigen Stunden Testen und Basteln habe ich folgende Abfrage zusammengestellt


SELECT
KOPF.ID_Pos,
KOPF.Pos_Text,
KOPF.Pos_Info,
Round(Sum(IIF(KALK.KoArt In (1000,1010,1100,1200,1300,1400,1800,1900,2200), IIF(KALK.MengEinh=18, KALK.Wert, 0), 0)),2) AS [Wasser],
Round(Sum(IIF(KALK.KoArt In (2000),                                         IIF(KALK.MengEinh=4 , KALK.Wert, 0), 0)),2) AS [Strom],
Round(Sum(IIF(KALK.KoArt In (2000,2110),                                    IIF(KALK.MengEinh=18, KALK.Wert, 0), 0)),2) AS [Gas],
Round(Sum(IIF(KALK.KoArt In (8210,8220,8230),                               IIF(KALK.MengEinh=36, KALK.Wert, 0), 0)),2) AS [Telefon]

FROM `C:\Dein\Pfad\Zur\Datenbank\objekt.mdb`.PO_KALK KALK,
     `C:\Dein\Pfad\Zur\Datenbank\objekt.mdb`.PO_KOPF KOPF
       
WHERE (KALK.Obj_Nr=?) AND (KALK.Obj_Nr = KOPF.Obj_Nr)  AND (KALK.ID_Pos = KOPF.ID_Pos)

GROUP BY KOPF.ID_Pos, KOPF.Pos_Text, KOPF.Pos_Info;




was bereits für 99% das richtige Ergebnis bringt !


Leider gibt es in der Tabelle PO_KOPF auch Wohnungen die keinerlei kosten verursacht haben und daher in der Tabelle PO_KALK auch überhaut nicht vorkommen. Mit dem Resultat das ich diese Wohnungen leider in der Abfrage auch nicht zurückgegeben bekomme. Was muss ich nun noch Ändern damit er mir diese Wohnungen zumindest Anzeigt und Hinten die Werte mit 0 zurückgibt.


Einen schönen Sonntag


MfG Stefan

Lachtaube

Grüße von der (⌒▽⌒)