Neu abweichende Lieferadressen aus Db auslesen

volvisti

Sehr aktives Mitglied
18. Juli 2017
311
43
Hallo zusammen,
in diesem Beitrag (Link dahin) geht es um ein ähnliches Thema, wie das das mir gerade Knoten im Hirn verursacht.

Was ich brauche, ist eigentlich "nur" ein SQL-Statement für eine Access-Abfrage mit dem ich folgendes erreiche:
Anzeige aller Adressen (Kunden, bzw. Lieferadressen), die
- der Kundengruppe 3 angehören
- bei denen ein bestimmtes Attribut gesetzt ist
- deren Vorname oder Name oder Strasse oder PLZ oder Ort in tkunde von denen in tadresse abweicht
-- hier sollen dann die Daten aus tadresse genommen werden (bei mehreren die Standardlieferadresse)
--- es sei denn die Lieferadresse ist eigentlich leer (passiert, wenn man in der Kundenverwaltung auf Lieferanschrift klickt und ohne zu speichern wieder verläßt)

Hintergrund ist, dass ich etwa 1600 Adressen von einem anderen Dienstleister übernommen habe und diese teils abweichende, teils identische und teils keine Lieferadressen haben.
Ich brauche aber für einen regelmäßigen Großversand die entsprechenden Kunden-/Lieferadressen.
Die Adressen werden in JTL gepflegt (sind teilweise auch Shopkunden) in Access per ODBC-Anbindung aus der Datenbank ausgelesen und entsprechend weiterverarbeitet.

Im oben genannten Beitrag werden Nachname, Firma und Strasse abgeglichen und ein Statustext in tBestellung eingetragen. Das nutzt mir leider nichts, da die Adressen über die Ameise und nicht über den Shop eingeflossen sind, es folglich keine Bestellung gibt.
Ausserdem kommt es vor, dass nur der Vorname abweicht, was von dem Script nicht erfasst würde.

Ich hoffe, ich habe das Problem gut genug konkretisiert und Ihr könnt mir helfen.

Besten Dank schon mal
 

mvh

Sehr aktives Mitglied
26. Oktober 2011
638
208
Hallo zusammen,
in diesem Beitrag (Link dahin) geht es um ein ähnliches Thema, wie das das mir gerade Knoten im Hirn verursacht.

Was ich brauche, ist eigentlich "nur" ein SQL-Statement für eine Access-Abfrage mit dem ich folgendes erreiche:
Anzeige aller Adressen (Kunden, bzw. Lieferadressen), die
- der Kundengruppe 3 angehören
- bei denen ein bestimmtes Attribut gesetzt ist
- deren Vorname oder Name oder Strasse oder PLZ oder Ort in tkunde von denen in tadresse abweicht
-- hier sollen dann die Daten aus tadresse genommen werden (bei mehreren die Standardlieferadresse)
--- es sei denn die Lieferadresse ist eigentlich leer (passiert, wenn man in der Kundenverwaltung auf Lieferanschrift klickt und ohne zu speichern wieder verläßt)

Hintergrund ist, dass ich etwa 1600 Adressen von einem anderen Dienstleister übernommen habe und diese teils abweichende, teils identische und teils keine Lieferadressen haben.
Ich brauche aber für einen regelmäßigen Großversand die entsprechenden Kunden-/Lieferadressen.
Die Adressen werden in JTL gepflegt (sind teilweise auch Shopkunden) in Access per ODBC-Anbindung aus der Datenbank ausgelesen und entsprechend weiterverarbeitet.

Im oben genannten Beitrag werden Nachname, Firma und Strasse abgeglichen und ein Statustext in tBestellung eingetragen. Das nutzt mir leider nichts, da die Adressen über die Ameise und nicht über den Shop eingeflossen sind, es folglich keine Bestellung gibt.
Ausserdem kommt es vor, dass nur der Vorname abweicht, was von dem Script nicht erfasst würde.

Ich hoffe, ich habe das Problem gut genug konkretisiert und Ihr könnt mir helfen.

Besten Dank schon mal
Hallo,
dieser Skript gibt ALLE abweichenden Lieferadressen, weil es nicht immer eine Standardlieferadresse gibt.
Kundengruppe = 3 und Kundenattribut ist 'Test' mit dem Wert 'Test'
Die Ausgabe ist gruppiert.
SQL:
SELECT kunde.[kKunde]
      ,[cKundenNr]
      ,CASE WHEN adresse.cVorname<>kunde.cVorname THEN adresse.cVorname ELSE kunde.cVorname END AS Vorname
   ,CASE WHEN adresse.cName<>kunde.cName THEN adresse.cName ELSE kunde.cName END AS Name
   ,CASE WHEN adresse.cStrasse<>kunde.cStrasse THEN adresse.cStrasse ELSE kunde.cStrasse END AS Strasse
   ,CASE WHEN adresse.cPLZ<>kunde.cPLZ THEN adresse.cPLZ ELSE kunde.cPLZ END AS PLZ
      ,[cEMail]
      ,MAX([cAktiv]) as Aktiv
  FROM [eazybusiness].[dbo].[tkunde] kunde
  INNER JOIN eazybusiness.dbo.tKundenAttribute kundeattrib ON kundeattrib.kKunde=kunde.kKunde
  INNER JOIN eazybusiness.dbo.tadresse adresse ON adresse.kKunde=kunde.kKunde
  WHERE kKundenGruppe=3
  AND kundeattrib.cName='Test' AND kundeattrib.cValue='Test'
  AND (adresse.cVorname<>kunde.cVorname OR adresse.cName<>kunde.cName OR adresse.cStrasse<>kunde.cStrasse OR adresse.cPLZ<>kunde.cPLZ)
  AND (adresse.cVorname IS NOT NULL AND adresse.cName IS NOT NULL AND adresse.cStrasse IS NOT NULL AND adresse.cPLZ IS NOT NULL)
  GROUP BY kunde.[kKunde], cKundenNr
      ,CASE WHEN adresse.cVorname<>kunde.cVorname THEN adresse.cVorname ELSE kunde.cVorname END
   ,CASE WHEN adresse.cName<>kunde.cName THEN adresse.cName ELSE kunde.cName END
   ,CASE WHEN adresse.cStrasse<>kunde.cStrasse THEN adresse.cStrasse ELSE kunde.cStrasse END
   ,CASE WHEN adresse.cPLZ<>kunde.cPLZ THEN adresse.cPLZ ELSE kunde.cPLZ END
      ,[cEMail]
  ORDER BY cKundenNr, Vorname, Name, Strasse, PLZ
 

volvisti

Sehr aktives Mitglied
18. Juli 2017
311
43
Hallo mvh,
vielen herzlichen Dank für Deine Arbeit.
Basierend darauf habe ich das Script etwas erweitert und an die Schreibweise von Access 2007 angepasst.

Nun sieht es so aus:

SELECT kunde.kKunde,
kunde.cKundenNr,
IIf([adresse].[cFirma]<>[kunde].[cFirma],[adresse].[cFirma],[kunde].[cFirma]) AS Firma,
IIf([adresse].[cAnrede]<>[kunde].[cAnrede],[adresse].[cAnrede],[kunde].[cAnrede]) AS Anrede,
IIf([adresse].[cTitel]<>[kunde].[cTitel],[adresse].[cTitel],[kunde].[cTitel]) AS Titel,
IIf([adresse].[cVorname]<>[kunde].[cVorname],[adresse].[cVorname],[kunde].[cVorname]) AS Vorname,
IIf([adresse].[cName]<>[kunde].[cName],[adresse].[cName],[kunde].[cName]) AS Name,
IIf([adresse].[cStrasse]<>[kunde].[cStrasse],[adresse].[cStrasse],[kunde].[cStrasse]) AS Strasse,
IIf([adresse].[cPLZ]<>[kunde].[cPLZ],[adresse].[cPLZ],[kunde].[cPLZ]) AS PLZ,
IIf([adresse].[cOrt]<>[kunde].[cOrt],[adresse].[cOrt],[kunde].[cOrt]) AS ORT,
kunde.cEMail AS EMail
FROM (dbo_tkunde AS kunde INNER JOIN dbo_tKundenAttribute AS attribut ON kunde.[kKunde] = attribut.[kKunde]) INNER JOIN dbo_tadresse AS adresse ON kunde.[kKunde] = adresse.[kKunde]

WHERE (((adresse.cVorname)<>[kunde].[cVorname] And (adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName) Is Not Null) AND ((adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ) Is Not Null) AND ((adresse.cOrt) Is Not Null))
OR (((adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName)<>[kunde].[cName] And (adresse.cName) Is Not Null) AND ((adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ) Is Not Null) AND ((adresse.cOrt) Is Not Null))
OR (((adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName) Is Not Null) AND ((adresse.cStrasse)<>[kunde].[cStrasse] And (adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ) Is Not Null) AND ((adresse.cOrt) Is Not Null))
OR (((adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName) Is Not Null) AND ((adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ)<>[kunde].[cPLZ]
And (adresse.cPLZ) Is Not Null) AND ((adresse.cOrt) Is Not Null))
OR (((adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName) Is Not Null) AND ((adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ) Is Not Null) AND ((adresse.cOrt)<>[kunde].[cOrt]
And (adresse.cOrt) Is Not Null))
GROUP BY kunde.[kKunde],
kunde.cKundenNr,
IIf([adresse].[cAnrede]<>[kunde].[cAnrede],[adresse].[cAnrede],[kunde].[cAnrede]),
IIf([adresse].[cTitel]<>[kunde].[cTitel],[adresse].[cTitel],[kunde].[cTitel]),
IIf([adresse].[cVorname]<>[kunde].[cVorname],[adresse].[cVorname],[kunde].[cVorname]),
IIf([adresse].[cName]<>[kunde].[cName],[adresse].[cName],[kunde].[cName]),
IIf([adresse].[cStrasse]<>[kunde].[cStrasse],[adresse].[cStrasse],[kunde].[cStrasse]),
IIf([adresse].[cPLZ]<>[kunde].[cPLZ],[adresse].[cPLZ],[kunde].[cPLZ]),
IIf([adresse].[cOrt]<>[kunde].[cOrt],[adresse].[cOrt],[kunde].[cOrt]),
kunde.cEMail,
IIf(adresse.cFirma<>kunde.cFirma,adresse.cFirma,kunde.cFirma),
kunde.cAktiv, kunde.cSperre HAVING (((kunde.cAktiv)="y") AND ((kunde.cSperre)="n"))
ORDER BY kunde.cKundenNr, Vorname, Name, Strasse, PLZ, Ort;


Es kommen jetzt zwar noch Parameterabfragen für die IIF- Variablen, aber ansonsten erhalte ich das gleiche Ergebnis, wie mit Deinem (durch micht etwas erweiterten) Statement in Heidi-SQL. :thumbsup:
Wenn jemand noch eine Idee hat, wie die Parameterabfragen wegzubekommen sind....

Jetzt fehlen mir zu meinem Glück nur noch die restlichen Adressen. Also die, die den Paramtern Attribut und Kundengruppe, wie oben benannt, entsprechen und jene mit Deinem Script ermittelten ausschliessen.
Ist es vermessen Dich darum zu bitten?

Besten Dank nochmal

P.S.: Irgendwie ist SQL doch durchaus übersichtlicher. :oops:
 

mvh

Sehr aktives Mitglied
26. Oktober 2011
638
208
Hallo mvh,
vielen herzlichen Dank für Deine Arbeit.
Basierend darauf habe ich das Script etwas erweitert und an die Schreibweise von Access 2007 angepasst.

Nun sieht es so aus:

SELECT kunde.kKunde,
kunde.cKundenNr,
IIf([adresse].[cFirma]<>[kunde].[cFirma],[adresse].[cFirma],[kunde].[cFirma]) AS Firma,
IIf([adresse].[cAnrede]<>[kunde].[cAnrede],[adresse].[cAnrede],[kunde].[cAnrede]) AS Anrede,
IIf([adresse].[cTitel]<>[kunde].[cTitel],[adresse].[cTitel],[kunde].[cTitel]) AS Titel,
IIf([adresse].[cVorname]<>[kunde].[cVorname],[adresse].[cVorname],[kunde].[cVorname]) AS Vorname,
IIf([adresse].[cName]<>[kunde].[cName],[adresse].[cName],[kunde].[cName]) AS Name,
IIf([adresse].[cStrasse]<>[kunde].[cStrasse],[adresse].[cStrasse],[kunde].[cStrasse]) AS Strasse,
IIf([adresse].[cPLZ]<>[kunde].[cPLZ],[adresse].[cPLZ],[kunde].[cPLZ]) AS PLZ,
IIf([adresse].[cOrt]<>[kunde].[cOrt],[adresse].[cOrt],[kunde].[cOrt]) AS ORT,
kunde.cEMail AS EMail
FROM (dbo_tkunde AS kunde INNER JOIN dbo_tKundenAttribute AS attribut ON kunde.[kKunde] = attribut.[kKunde]) INNER JOIN dbo_tadresse AS adresse ON kunde.[kKunde] = adresse.[kKunde]

WHERE (((adresse.cVorname)<>[kunde].[cVorname] And (adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName) Is Not Null) AND ((adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ) Is Not Null) AND ((adresse.cOrt) Is Not Null))
OR (((adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName)<>[kunde].[cName] And (adresse.cName) Is Not Null) AND ((adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ) Is Not Null) AND ((adresse.cOrt) Is Not Null))
OR (((adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName) Is Not Null) AND ((adresse.cStrasse)<>[kunde].[cStrasse] And (adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ) Is Not Null) AND ((adresse.cOrt) Is Not Null))
OR (((adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName) Is Not Null) AND ((adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ)<>[kunde].[cPLZ]
And (adresse.cPLZ) Is Not Null) AND ((adresse.cOrt) Is Not Null))
OR (((adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName) Is Not Null) AND ((adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ) Is Not Null) AND ((adresse.cOrt)<>[kunde].[cOrt]
And (adresse.cOrt) Is Not Null))
GROUP BY kunde.[kKunde],
kunde.cKundenNr,
IIf([adresse].[cAnrede]<>[kunde].[cAnrede],[adresse].[cAnrede],[kunde].[cAnrede]),
IIf([adresse].[cTitel]<>[kunde].[cTitel],[adresse].[cTitel],[kunde].[cTitel]),
IIf([adresse].[cVorname]<>[kunde].[cVorname],[adresse].[cVorname],[kunde].[cVorname]),
IIf([adresse].[cName]<>[kunde].[cName],[adresse].[cName],[kunde].[cName]),
IIf([adresse].[cStrasse]<>[kunde].[cStrasse],[adresse].[cStrasse],[kunde].[cStrasse]),
IIf([adresse].[cPLZ]<>[kunde].[cPLZ],[adresse].[cPLZ],[kunde].[cPLZ]),
IIf([adresse].[cOrt]<>[kunde].[cOrt],[adresse].[cOrt],[kunde].[cOrt]),
kunde.cEMail,
IIf(adresse.cFirma<>kunde.cFirma,adresse.cFirma,kunde.cFirma),
kunde.cAktiv, kunde.cSperre HAVING (((kunde.cAktiv)="y") AND ((kunde.cSperre)="n"))
ORDER BY kunde.cKundenNr, Vorname, Name, Strasse, PLZ, Ort;


Es kommen jetzt zwar noch Parameterabfragen für die IIF- Variablen, aber ansonsten erhalte ich das gleiche Ergebnis, wie mit Deinem (durch micht etwas erweiterten) Statement in Heidi-SQL. :thumbsup:
Wenn jemand noch eine Idee hat, wie die Parameterabfragen wegzubekommen sind....

Jetzt fehlen mir zu meinem Glück nur noch die restlichen Adressen. Also die, die den Paramtern Attribut und Kundengruppe, wie oben benannt, entsprechen und jene mit Deinem Script ermittelten ausschliessen.
Ist es vermessen Dich darum zu bitten?

Besten Dank nochmal

P.S.: Irgendwie ist SQL doch durchaus übersichtlicher. :oops:

Hallo,
für Access 2007 entferne bitte die eckigen Klammern [ ] , sonst sind es Parameter und keine Felder.
Mein Code war für SQL Server, dort sind die [ und ] Feldtrennzeichen.
Viele Grüße, Ihr mvh-Team
 

volvisti

Sehr aktives Mitglied
18. Juli 2017
311
43
Hallo mvh-Team,
hmmm, hab jetzt alle [ ] entfernt. trotzdem fragt die Abfrage beim Öffnen noch die Parameter ab.
Komischerweise nur Vorname, Name, Strasse, PLZ und Ort.
Anrede, Titel und Firma werden nicht abgefragt. :-$
Hab das Statement dreimal durchsucht und keine [ ] mehr gefunden.

Hast Du noch eine Idee?

Danke Dir
 

mvh

Sehr aktives Mitglied
26. Oktober 2011
638
208
Hallo mvh-Team,
hmmm, hab jetzt alle [ ] entfernt. trotzdem fragt die Abfrage beim Öffnen noch die Parameter ab.
Komischerweise nur Vorname, Name, Strasse, PLZ und Ort.
Anrede, Titel und Firma werden nicht abgefragt. :-$
Hab das Statement dreimal durchsucht und keine [ ] mehr gefunden.

Hast Du noch eine Idee?

Danke Dir
Hallo,
ich habe den SQL-Code für Access 2007 an dich gesendet, so hast du keine Parameter-Abfrage mehr.

Du hast in deinem SQL noch die Kundengruppe und Kundenattribut vergessen,
hier die WHERE-Klausel für Kunden-Gruppe 3 und Kunden-Attribut 'Test' mit dem Wert 'Test'
WHERE kKundenGruppe=3 AND kundeattrib.cName='Test' AND kundeattrib.cValue='Test'
Mit freundlichen Grüßen, Ihr mvh-Team
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu wenn abweichende Adresse dann nur weiße Seite? JTL-Shop - Fehler und Bugs 7
Neu Gefahrlos Testkunden aus tkunde löschen? Umstieg auf JTL-Shop 0
Neu Kurzbeschreibung aus mehreren Zellen importieren - möglich? User helfen Usern - Fragen zu JTL-Wawi 3
Neu Daten aus getBackorderString Templates für JTL-Shop 7
Neu Nach Update auf 5.3 fliegen die Produkte aus dem Merchant Center JTL-Shop - Fehler und Bugs 0
Neu Update des JTL shops aus der Wawi funktioniert nicht Allgemeine Fragen zu JTL-Shop 1
Neu EK-Netto der Verkäufe aus Datenbank ? User helfen Usern - Fragen zu JTL-Wawi 5
Kundenattribute aus Shop übernehmen und aus Wawi zurück an Shop übermitteln Einrichtung JTL-Shop5 1
Neu Produktdaten aus Shop zur Wawi WooCommerce-Connector 9
Neu Kunden aus Wawi nicht auffindbar JTL-POS - Fehler und Bugs 4
Versuch Bilder aus Ebay für Kaufland zu übernehmen JTL-Wawi 1.8 0
Druckvorlage für Etiketten aus Auftragspositionen JTL-Wawi 1.8 4
Neu Shop in Unterverzeichnis führt dazu, dass Inhalte aus dem übergeordneten Verzeichnis im Shop gezeigt werden JTL-Shop - Fehler und Bugs 3
Rechnung zeigt Mehrwertsteuer 0% aus obwohl 7% berechnet werden - wenn UST-ID eingegeben JTL-Wawi 1.8 0
Warum sind die Rechnungen aus Aufträge(mit Rechnung(Vollständig)) nicht unter Rechnung zu finden JTL-Wawi 1.7 0
Neu Alle Produktbilder in Shopify aus JTL löschen Shopify-Connector 0
Neu Zusammenführen / Konsolidieren von Artikeln aus 2 Quellen (Amazon / Shopify) und zentrale Bestands-Verteilung an beide Systeme User helfen Usern - Fragen zu JTL-Wawi 0
Kartonage (Set) besteht aus mehreren Artikeln (Stückliste) JTL-Wawi 1.8 0
Neu Coupon einlösbar bei Mindestbestellwert aus Kategorie xy Allgemeine Fragen zu JTL-Shop 0
Neu Suche Seite 2 gibt falsche URL aus JTL-Shop - Fehler und Bugs 4
Neu NEU ✔️ PDF-Angebots-Plugin für den JTL-Shop 5 - PDF Angebote von der Produktseite oder aus dem Warenkorb heraus generieren B2C / B2B Plugins für JTL-Shop 5
Neu JTL POS übernimmt Attribute nicht aus WaWi Einrichtung / Updates von JTL-POS 2
Neu Aus bestehenden Artikeln einen Vaterartikel erzeugen. JTL-Wawi - Ideen, Lob und Kritik 0
Ausgabe per E-Mail geht plötzlich nicht mehr, Testmail aus Wawi aber schon JTL-Wawi 1.6 22
Neu erster JTL Shop - Artikelbilder aus Cloudspeicher - aber nicht in die Wawi eazybuisiness DB Allgemeine Fragen zu JTL-Shop 0
Neu Emails aus der Wawi an Gmail kommen nicht an ///SPF User helfen Usern - Fragen zu JTL-Wawi 4
In Diskussion Workflow, Wert setzen aus Zwischenablage/Clipboard JTL-Workflows - Ideen, Lob und Kritik 0
Neu Nach Import von Kundendaten aus SW5 Umleitung nach Login und weiße Seite JTL-Shop - Fehler und Bugs 5
Artikel aus Auftrag entfernen, Zahlung drin lassen JTL-Wawi 1.7 0
Neu E-Mail Versandbenachrichtigung aus JTL Wawi 1.8.10.0 wird doppelt versendet User helfen Usern 0
Texte aus Webshop Datei ziehen Einrichtung JTL-Shop5 0
Neu Packtisch druckt nichts aus User helfen Usern - Fragen zu JTL-Wawi 0
Workflow Bug: Rechnungskorrektur erstellen aus Retoure JTL-Wawi 1.8 4
Neu Summe aus Spalte bilden Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Neu Teillieferung von Artikeln aus Versandbox, auch wenn andere bereits in der Versandbox sind Arbeitsabläufe in JTL-WMS / JTL-Packtisch+ 0
Neu Auftrag aus Woocommerce Import zeigt im Druck "Zahlungsziel beträgt 150 Tage ab Rechnungsdatum" User helfen Usern - Fragen zu JTL-Wawi 0
Neu cDeeplink für Google Shopping direkt aus der Shop-Datenbank? Allgemeine Fragen zu JTL-Shop 0

Ähnliche Themen