Jump to content

Abfrage gibt falschen Wert aus


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo an alle wissenden,

 

ich versuche gerade in meiner Datenbank das Rechnungsdatum auf zwei Tage nach dem Versanddatum zu setzen, da ich sehr viele alte Rechnungen für Amazonverkäufe nachträglich erstellen muss und ansonsten immer das heute Rechnungsdatum genutzt wird, was bei einem 4 Monate alten Auftrag nicht gut ist.

Mein Code dazu sieht wie folgt aus:

 

UPDATE    trechnung
SET              dErstellt = DATEADD(d, 2, tbestellung.dVersandt)
FROM         tbestellung CROSS JOIN
                      trechnung AS trechnung_1 CROSS JOIN
                      trechnung
WHERE     (tbestellung.dErstellt IS NOT NULL) AND (tbestellung.nPlatform = '51') OR
                      (tbestellung.nPlatform = '52') OR
                      (tbestellung.nPlatform = '53') OR
                      (tbestellung.nPlatform = '54') OR
                      (tbestellung.nPlatform = '55') OR
                      (tbestellung.nPlatform = '56') OR
                      (tbestellung.nPlatform = '57') OR
                      (tbestellung.nPlatform = '1')

 

Er funktioniert soweit, und solange ich zum Test bei SET dErstellt = eine Datumspalte aus der gleichen Tabelle nehme funktioniert es auch einwandfrei. Sobald ich aber das Versanddatum aus der Tabelle tbestellung als Basis zur hochrechnung nehmen will, führt er zwar die Abfrage aus, setzt mir aber ALLE Rechnung auf den 2.2.2011, was dem ersten Auftragsdatum aus der tabelle tbestellung entspricht. Wo liegt mein Fehler?

 

Danke für alle Tips und Hilfen.

 

Viele Grüße
Mario

Link zu diesem Kommentar

Hi Mario

 

1. Warum nutzt du CROSS JOIN? Was ist die Verbindung zw. trechnung und tbestellung? In der Tabelle trechnung musst du doch ein ID-Feld von tbestellung haben. Diese Felder nutzen und INNER JOIN verwenden. Das kartesische Produkt der 2 Tabellen erscheint mir unsinnig. Du hast die trechnung auch 2x verknüpft...

2. Die OR-Kette muss noch umklammert werden: (dErstellt IS NOT NULL) AND (...OR   OR...OR). Übersichtlicher ist es, wenn du IN verwendest:

    WHERE  (dbo.tbestellung.dErstellt IS NOT NULL) AND dbo.tbestellung.nPlatform IN ('1','51', '52', '53', '54', '55', '56', '57')

Link zu diesem Kommentar

So wie der Code jetzt steht wurde er mir ausgegeben nachdem ich die Abfrage zum ersten mal ausgeführt habe. Das CROSS JOIN entstand also nach der Abfrage von selbst.

 

Es gibt eine Gemeinsamkeit. Das ist folgende:

(trechnung.kRechnung = tbestellung.tRechnung_kRechnung)

 

Nur wo ich das INNER JOIN jetzt setzte, verstehe ich nicht so ganz. Sorry ich habe normal mit SQL Abfragen nicht wirklich was am Hut.

 

Dank für deine Hilfe.

Link zu diesem Kommentar

UPDATE    trechnung
SET              dErstellt = DATEADD(d, 2, tbestellung.dVersandt)
FROM         tbestellung

                   INNER JOIN trechnung

                        ON trechnung.kRechnung = tbestellung.tRechnung_kRechnung
WHERE  

      (dbo.tbestellung.dErstellt IS NOT NULL)

      AND dbo.tbestellung.nPlatform IN ('1','51', '52', '53', '54', '55', '56', '57')

Link zu diesem Kommentar
  • 4 Wochen später...

Hallo Pathomorph,

 

ich glaube ich habe da doch noch mal ein Problem. Ich habe den Code letztens über nPlatform für nur eine Rechnung ausgeführt was auch funktioniert hat. Jetzt habe ich aber den Code für alle Platformen ausgeführt und wollte das er nur Aufträge ab einem bestimmten Datum ausführt und genau das geht nicht. Ich habe vorher zum Test mal ein SELECT mit dem Code gemacht und da findet er den richtigen Auftrag und bei UPDATE werden alle Aufträge genommen, selbst die die garkein Datum haben.

 

Der funktionierende SELECT Code lautet:

SELECT     tbestellung.dVersandt

FROM         tbestellung INNER JOIN
                      trechnung ON trechnung.kRechnung = tbestellung.tRechnung_kRechnung
WHERE     (tbestellung.dVersandt >= '2012-10-09') AND (tbestellung.nPlatform IN ('1', '2', '51', '52', '53', '54', '55', '56', '57'))

 

 

und der UPDATE Code danach:

UPDATE    trechnung
SET              dErstellt = DATEADD(d, 2, tbestellung.dVersandt)
FROM         tbestellung

                   INNER JOIN trechnung
                        ON trechnung.kRechnung = tbestellung.tRechnung_kRechnung
WHERE  
      (dbo.tbestellung.dVersandt >= '2012-10-09')
      AND dbo.tbestellung.nPlatform IN ('1',  '2', '51', '52', '53', '54', '55', '56', '57')  

 

 

wobei nach ausführen der Abfrage danach folgendes daraus wird:

UPDATE    trechnung
SET              dErstellt = DATEADD(d, 2, tbestellung.dVersandt)
FROM         tbestellung INNER JOIN
                      trechnung AS trechnung_1 ON trechnung_1.kRechnung = tbestellung.tRechnung_kRechnung CROSS JOIN
                      trechnung
WHERE     (tbestellung.dVersandt >= '2012-10-09') AND (tbestellung.nPlatform IN ('1', '2', '51', '52', '53', '54', '55', '56', '57'))

Kannst du mir da nochmal helfen?

 

Viele Grüße

Mario

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...