Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   [SQL] zusätzliche Bedingung für INNER JOIN (https://www.delphipraxis.net/106715-%5Bsql%5D-zusaetzliche-bedingung-fuer-inner-join.html)

Evian 15. Jan 2008 13:42

Datenbank: MS SQL Server • Version: 2000 • Zugriff über: per ACCESS-Frontend bzw. SQL Server Enterprise Manager

[SQL] zusätzliche Bedingung für INNER JOIN
 
Hallo Zusammen,

ich möchte eine MS SQL-Server-View per INNER JOIN mit einer bestimmten Tabelle zu einer neuen Sicht verknüpfen. ->

http://www.phillsoft.de/Phill/work/abfrage.JPG

Soweit ist das kein Problem. Nun kann es aber in der Tabelle tPersonal_Aenderungen mehrere Datensätze geben, die zu einem bestimmten Mitarbeiter (tPersonal_fest) gehören. Praktisch ist aber immer nur ein Datensätz aktuell bzw. relevant... und zwar jeweils der, bei dem Aenderungsdatum_Beginn < now() und Aenderungsdatum_Ende > now() ist.

Meine Abfrage sieht im Moment wie folgt aus:

SQL-Code:
SELECT    TOP 100 PERCENT dbo.sBer_PersPlanUebersicht.PK_tPersonal, dbo.sBer_PersPlanUebersicht.Pk_tPersonal_fest,
                      dbo.sBer_PersPlanUebersicht.Nachname, dbo.sBer_PersPlanUebersicht.Vorname, YEAR(dbo.sBer_PersPlanUebersicht.Datum) AS Jahr,
                      SUM(dbo.sBer_PersPlanUebersicht.Brutto) AS Brutto, SUM(dbo.sBer_PersPlanUebersicht.Urlaubsgeld) AS Urlaubsgeld,
                      SUM(dbo.sBer_PersPlanUebersicht.Weihnachtsgeld) AS Weihnachtsgeld, SUM(dbo.sBer_PersPlanUebersicht.Einmalzahlung) AS Einmalzahlung,
                      SUM(dbo.sBer_PersPlanUebersicht.VWL_AG) AS VWL_AG, SUM(dbo.sBer_PersPlanUebersicht.BAV_AG) AS BAV_AG,
                      SUM(dbo.sBer_PersPlanUebersicht.Brutto + dbo.sBer_PersPlanUebersicht.Urlaubsgeld + dbo.sBer_PersPlanUebersicht.Weihnachtsgeld + dbo.sBer_PersPlanUebersicht.Einmalzahlung
                       + dbo.sBer_PersPlanUebersicht.VWL_AG + dbo.sBer_PersPlanUebersicht.BAV_AG - dbo.sBer_PersPlanUebersicht.BAV_AG - dbo.sBer_PersPlanUebersicht.BAV_AG)
                       AS SVBrutto,
                      SUM(dbo.sBer_PersPlanUebersicht.Brutto + dbo.sBer_PersPlanUebersicht.Urlaubsgeld + dbo.sBer_PersPlanUebersicht.Weihnachtsgeld + dbo.sBer_PersPlanUebersicht.Einmalzahlung
                       + dbo.sBer_PersPlanUebersicht.VWL_AG + dbo.sBer_PersPlanUebersicht.BAV_AG) AS AGBrutto,
                      SUM(dbo.sBer_PersPlanUebersicht.Nettobetrag - dbo.sBer_PersPlanUebersicht.VWL_Sparbetrag - dbo.sBer_PersPlanUebersicht.Pfaendung)
                      AS zbetrag, SUM(dbo.sBer_PersPlanUebersicht.Nettobetrag) AS Nettobetrag, SUM(dbo.sBer_PersPlanUebersicht.AlleAGAnteile) AS AlleAGAnteile,
                      SUM(dbo.sBer_PersPlanUebersicht.Pauschalsteuer) AS Pauschalsteuer, SUM(dbo.sBer_PersPlanUebersicht.Umlageversicherung1)
                      AS Umlageversicherung1, SUM(dbo.sBer_PersPlanUebersicht.Umlageversicherung2) AS Umlageversicherung2, dbo.tPersonal_Aenderungen.Bat,
                      dbo.tPersonal_Aenderungen.Urlaubsanspruch
FROM        dbo.sBer_PersPlanUebersicht INNER JOIN
                      dbo.tPersonal_Aenderungen ON dbo.sBer_PersPlanUebersicht.Pk_tPersonal_fest = dbo.tPersonal_Aenderungen.FK_tPersonal_fest
GROUP BY dbo.sBer_PersPlanUebersicht.PK_tPersonal, dbo.sBer_PersPlanUebersicht.Nachname, dbo.sBer_PersPlanUebersicht.Vorname,
                      YEAR(dbo.sBer_PersPlanUebersicht.Datum), dbo.sBer_PersPlanUebersicht.Pk_tPersonal_fest, dbo.tPersonal_Aenderungen.Bat,
                      dbo.tPersonal_Aenderungen.Urlaubsanspruch
ORDER BY dbo.sBer_PersPlanUebersicht.Nachname
Ich schätze ich hätte im Seminar "grundlagen SQL" besser aufpassen sollen, aber leider weiß ich einfach nicht mehr, wie ich dem Join eine zusätzliche Bedingung geben kann. Wie gesagt, es sollen nur die aktuellen Datensätze aus tPersonal_Aenderungen Teil der Abfrage sein. Kann mir jemand einen Tip geben?

vielen Dank,

Phill

Evian 15. Jan 2008 13:47

Re: [SQL] zusätzliche Bedingung für INNER JOIN
 
ok Danke :),

hat sich schon erledigt... ich machs einfach per:

SQL-Code:
HAVING     (dbo.tPersonal_Aenderungen.Aenderungsdatum_Beginn < { fn NOW() }) AND (dbo.tPersonal_Aenderungen.Aenderungsdatum_Ende > { fn NOW() } OR
                      dbo.tPersonal_Aenderungen.Aenderungsdatum_Ende IS NULL)
sofern die Clowns von der Buchhaltung nicht wieder mehrere gültige Datensätze eingegeben haben, dürfte es da eigentlich kein Problem geben.

lg,

Phill

mkinzler 15. Jan 2008 13:50

Re: [SQL] zusätzliche Bedingung für INNER JOIN
 
SQL-Code:
...
FROM
    dbo.sBer_PersPlanUebersicht INNER JOIN dbo.tPersonal_Aenderungen ON
        dbo.sBer_PersPlanUebersicht.Pk_tPersonal_fest = dbo.tPersonal_Aenderungen.FK_tPersonal_fest and
        dbo.tPersonal_Aenderungen.Aenderungsdatum_Beginn > now() and
        dbo.tPersonal_Aenderungen.Aenderungsdatum__Ende > now()
...


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz