WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 06.10.2006, 07:20   #1
Hussl
Veteran
 
Registriert seit: 08.02.2001
Alter: 41
Beiträge: 320


Standard SQL Select Frage

Hallo, hätte gerne gewußt, wie euer Select Statement für folgendes aussehen würde.

Zwei Tabellen Kunden und History

Code:
Kunden:
- KundenID
- ...

History:
- HistoryID
- KundenID
- FlagID
- LinkID
- ...
Die Tabelle History ist eine Rechnungshistorie, wo ich Rechnungen, Zahlungen, Gutschriften und Rücküberweisungen speichere.
Code:
FlagID   Beschreibung
-------+----------------
1        Rechnung
2        Zahlung
3        Gutschrift
4        Rücküberweisung
Im Feld History.LinkID steht die HistoryID zu dem jeweilig dazugehörenden Datensatz. Zum Beispiel, wenn ich eine Rechnung habe und der Kunde hat bezahlt, dann steht im Zahlungs-Datensatz die LinkID zur Rechnung. Somit kann ich das eindeutig zuordnen.

Mich würde jetzt interessieren, wie das Select-Statement aussieht, wenn ich zum Beispiel alle Kunden haben will, die schon bezahlt haben. Unter Berücksichtigung evtl. vorhandener Gutschriften und neuerlicher Zahlscheinausstellung. Es kann ja vorkommen, dass ich eine Rechnung geschickt habe, die Adresse oder Firmenname, etc. nicht genau gepasst haben, er daher eine Gutschrift bekommt und dann einen neuerlichen Zahlschein. Das würde dann so ausschauen:
Code:
HistoryID  KundenID  FlagID  LinkID
----------+---------+-------+------
1          1         1             #Rechnung
2          1         3       1     #Gutschrift
3          1         1             #Rechnung
Oder wenn bereits bezahlt wurde, aber eine Rücküberweisung stattgefunden hat
Code:
HistoryID  KundenID  FlagID  LinkID
----------+---------+-------+------
1          1         1             #Rechnung
2          1         2       1     #Zahlung
3          1         3       1     #Gutschrift
4          1         4       1     #Rücküberweisung
In diesem Fall hat der Kunde natürlich nicht bezahlt...

Wie sieht da also die Abfrage aus? Ist übrigens eine Access-Datenbank, aber das ist ja eigentlich Powidl...
____________________________________
Nein, ich bin nicht die Signatur, ich putz hier nur.

http://www.chili-it.at
Hussl ist offline   Mit Zitat antworten
Alt 06.10.2006, 08:21   #2
iG0r
Gesperrt
 
Registriert seit: 14.08.2003
Alter: 47
Beiträge: 915


Standard

vorm 1. redbull tu ich mir immer schwer aber ich versuchs mal

Code:
SELECT kun.*, his.* FROM Kunden AS kun LEFT JOIN History AS his ON (kun.KundenID = his.KundenID) WHERE his.FlagID = 2 AND his.FlagID = 3
diese sql sollte dir alle kunden abfragen, welche flagid 2 und 3 haben, sprich ein zahlungs und gutschrifts flag haben. man kann das WHERE also so wie man es braucht erweitern oder einschränken. mir ist nur gerade unklar wozu du das linkid feld hast, die kunden id ist ja sowieso mit dabei.
iG0r ist offline   Mit Zitat antworten
Alt 06.10.2006, 19:53   #3
Hussl
Veteran
 
Registriert seit: 08.02.2001
Alter: 41
Beiträge: 320


Standard

Die LinkID brauch ich dafür, um die Gutschrift einer Rechnung zuordnen zu können. Wie ich geschrieben habe, kann es sein, dass irgendwas auf der Rechnung nicht passt und dann braucht der Kunde eine Gutschrift und erhält dann eine neue Rechnung. Ohne LinkID hätte ich dann zwei Rechnungen und eine Gutschrift und ich wüßte nicht mehr, welche zusammen gehören...

Ich habe mal eine Datenbank erstellt um das besser zu veranschaulichen. Bei der Abfrage Rechnung_nicht_bezahlt kommen zum Beispiel falsche Datensätze raus. Wie der Name schon sagt, will ich nur die haben, die noch nicht bezahlt haben. Das wären die Datensätze mit KundenID 3, 4 und 5. KundenID 1 hat schon bezahlt, also nicht ausgeben und KundenID 2 hat eine Gutschrift auf seine Rechnung und keine neue erhalten, also auch nicht ausgeben.

Verständlich, worum es mir geht??
____________________________________
Nein, ich bin nicht die Signatur, ich putz hier nur.

http://www.chili-it.at
Hussl ist offline   Mit Zitat antworten
Alt 06.10.2006, 20:16   #4
iG0r
Gesperrt
 
Registriert seit: 14.08.2003
Alter: 47
Beiträge: 915


Standard

Also FlagID 1 haben alle die eine Rechnung bekommen haben und FlagID 2 jene, die eine Zahlung geleistet haben? In LinkID steht dann immer wozu welche Aktion gehör?

Hab leider kein Access, daher kann ich mir dein Beispiel nicht anschaun. Nimm einfach das SQL von mir und verändere das WHERE.

Code:
WHERE his.FlagID = 1 AND his.FlagID != 2
... sollte eigentlich alle mit Rechung auflisten, die aber noch keine Zahlung geleistet haben.
iG0r ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:51 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag