mawi1 0 Geschrieben 13. April 2014 Melden Teilen Geschrieben 13. April 2014 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 trechnungSET dErstellt = DATEADD(d, 2, tbestellung.dVersandt)FROM tbestellung CROSS JOIN trechnung AS trechnung_1 CROSS JOIN trechnungWHERE (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üßeMario Zitieren Link zu diesem Kommentar
Pathomorph 1 Geschrieben 13. April 2014 Melden Teilen Geschrieben 13. April 2014 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') Zitieren Link zu diesem Kommentar
mawi1 0 Geschrieben 13. April 2014 Autor Melden Teilen Geschrieben 13. April 2014 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. Zitieren Link zu diesem Kommentar
Pathomorph 1 Geschrieben 13. April 2014 Melden Teilen Geschrieben 13. April 2014 UPDATE trechnungSET dErstellt = DATEADD(d, 2, tbestellung.dVersandt)FROM tbestellung INNER JOIN trechnung ON trechnung.kRechnung = tbestellung.tRechnung_kRechnungWHERE (dbo.tbestellung.dErstellt IS NOT NULL) AND dbo.tbestellung.nPlatform IN ('1','51', '52', '53', '54', '55', '56', '57') Zitieren Link zu diesem Kommentar
mawi1 0 Geschrieben 13. April 2014 Autor Melden Teilen Geschrieben 13. April 2014 Du bist der Beste. Funktioniert super. Vielen vielen Dank. Zitieren Link zu diesem Kommentar
Pathomorph 1 Geschrieben 13. April 2014 Melden Teilen Geschrieben 13. April 2014 Da ich die Tabellenstruktur nicht kenne, kann auch ein "LEFT OUTER JOIN" oder "RIGHT OUTER JOIN" Sinn machen. BTW: Wenn du 2 Tabellen in den Abfragedesigner schmeisst, wird automatisch ein CROSS JOIN, was zu 95% unsinnig ist... Du musst immer die Tabellen verknüpfen Zitieren Link zu diesem Kommentar
mawi1 0 Geschrieben 10. Mai 2014 Autor Melden Teilen Geschrieben 10. Mai 2014 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 Zitieren Link zu diesem Kommentar
mawi1 0 Geschrieben 11. Mai 2014 Autor Melden Teilen Geschrieben 11. Mai 2014 Es dürfen natürlich auch gerne alle anderen Tips und Hilfestellungen zu meinem Problem geben. :-) Zitieren Link zu diesem Kommentar
Pathomorph 1 Geschrieben 11. Mai 2014 Melden Teilen Geschrieben 11. Mai 2014 Hi Ich verstehe nicht, wie aus der Abfrage was "wird". Was machst du damit??? In deiner "gewordenen" Abfrage siehst du wieder dein "CROSS JOIN", was da nicht hin gehört.... Wo und wie führst du die Abfrage aus? Zitieren Link zu diesem Kommentar
mawi1 0 Geschrieben 11. Mai 2014 Autor Melden Teilen Geschrieben 11. Mai 2014 Ich gehe in die Tabelle trechnung und dann oben auf SQL Bereich anzeigen dann gebe ich meine Formel ein und drücke das rote Ausrufezeichen SQL ausführen. Dann kommt die Meldung das 48 Datensätze betroffen waren also alle Zeile aus der Tabelle trechnung und oben erscheint der neue Code mit dem CROSS JOIN Zitieren Link zu diesem Kommentar
zahni 550 Geschrieben 12. Mai 2014 Melden Teilen Geschrieben 12. Mai 2014 Womit macht Du denn die Abfrage ? Hoffentlich nicht Access. Probiere es mal mit dem SQL Management Studio, verbinde Dich mit der DB und klicke dann auf "New Query" bzw. "Neue Abfrage" Zitieren Link zu diesem Kommentar
mawi1 0 Geschrieben 12. Mai 2014 Autor Melden Teilen Geschrieben 12. Mai 2014 Hallo zahni, das ist ja der Hammer. Ich habe es die ganze Zeit schom im Studio gemacht nur eben über eine SQL Abfrage in der Tabelle trechnung. Wenn ich es aber über Datenbank markieren->rechte Maustaste->Neue Abfrage mache dann funktioniert es wirklich wie gewoltl. Viele vielen Dank nochmal euch beiden Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.