Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Frage Entwicklung Datenbanken

GELÖST

Tabellenergebnisse mit into in neue tabelle schreiben, aber leere ergebnisse mit 0 auffüllen

Mitglied: boesi666

boesi666 (Level 1) - Jetzt verbinden

23.12.2011 um 08:30 Uhr, 5546 Aufrufe, 9 Kommentare

Moin zusammen, nach der echt tollen Hilfe bei meinen ersten beitrag war ich sehr begeistert und traue mich gleich mal eine 2. Frage zu stellen, die so ein bisschen als folge der ersten lösung nun auftritt... freue mich, wenn Ihr mir nen tipp geben könnt.

ich schiebe hier ergebnisse in eine neu tabelle temp_DB_name

SELECT
a.id as Art_Id,
a.EAN ,
a.Artikel_Nr ,
a.Artikel_Bezeichnung,
a.Bestand as Soll_Menge,
i.Menge as gezählt_Menge,
(a.Bestand - i.Menge ) as Differenz

into " & temp_DB_name & " FROM

Artikel a left JOIN (SELECT Inventur.ean, Sum( Inventur.menge ) as Menge from Inventur group by ean) i on i.ean = a.ean where a.id > 0 " & LAGERARTIKEL_Kurz & POSARTIKEL_Kurz & " and ( i.ean is null or a.Bestand <> i.Menge )

(sorry, dass das hier nicht so schön in der vorschau aussieht)

mein problem sind diese beiden Felder, wenn sie in die neue tabelle geschrieben werden:
i.Menge as gezählt_Menge,
(a.Bestand - i.Menge ) as Differenz

Wenn i.Menge nicht vorhanden ist, da feld leer, soll beim schreiben mit der into anweisung in die neue tabelle wenigstens eine 0 reingeschreiben werden (und nicht nix NULL)

Problem 2: wenn i.Menge bei der abfrage nix beinhalten ist bei (a.Bestand - i.Menge ) as Differenz leider immer auch das Ergebnis NULL (wenn a.Bestand aber z.b. 30 wäre, und i.Menge 0 (oder NULL), soll Differenz aber eben auch 30 sein. Durch NULL im feld i.Menge kommt die Rechenoperation aber leider durcheinander.

ich kann zwar nach erstellen der neuen tabelle alle leeren felder mit 0 auffüllen, indem ich ein update temp_DB_name set gezählt Menge= 0 where gezählt_Menge is Null ausführe, aber ist nicht die feine art, und ausserdem löse ich das problem mit dem automatisch zu errechnenden feld differenz beim schreiben der neuen tabelle auch nicht sauber.

Es gibt ja solche DEFAULT Anweisung beim erstellen eines feldes, aber wie das bei dieser tabellen erstellung on thy fly klappt, weiss ich nicht
Mitglied: it-frosch
23.12.2011 um 08:47 Uhr
Guten Morgen boesi666,

ich würde an deiner Stelle die temporäre Tabelle mit create table .... erstellen und anschließend wieder löschen.
Dann kannst du auch die Felder für Bestand und Menge auf Default 0 setzten und solltest das Problem los sein.

grüße vom it-frosch
Bitte warten ..
Mitglied: Indrador
23.12.2011 um 09:17 Uhr
Hi,

je nach SQL Variante kannst du folgendes im Select benutzen:

isnull(i.Menge,0) as gezählt_Menge,
isnull((a.Bestand - i.Menge ),a.Bestand) as Differenz

ifnull(i.Menge,0) as gezählt_Menge,
ifnull((a.Bestand - i.Menge ),a.Bestand) as Differenz

Das ersetzt dann NULL-Werte mit vorgegebenen Werten, diese können sowohl Text als auch Zahlen sein.

Gruß
Bitte warten ..
Mitglied: boesi666
23.12.2011 um 10:20 Uhr
das werde ich heute mal probieren...
Bitte warten ..
Mitglied: boesi666
23.12.2011 um 19:52 Uhr
ja hat leider mit den vorschlag nicht geklappt. das liegt aber sicher daran, dass es sich mit visual basic und ansprechen de access db oft nicht ganz so schick verhält, wie auf aktuellen mysql systemen

hab das so beibehalten wie bishher und surch 2. befehl nach erzeugung der tabelle die diefferenz nachträglich errechnen lassen und vorhher noch mit nen befehl eben die null felder mit 0 aufgefüllt...
Bitte warten ..
Mitglied: Indrador
23.12.2011 um 21:20 Uhr
Achso Access, ich bin von einer richtigen Datenbank ausgegangen. ;)

Versuch mal das:
http://www.techonthenet.com/access/functions/advanced/isnull.php

Gruß
Bitte warten ..
Mitglied: Biber
24.12.2011 um 00:17 Uhr
Moin boesi666,

nur als Ergänzung zu Indrador.

-> die Änderung in deinem Statement sollte hinauslaufen auf ein
SELECT  ... 
.. INTO.... 
FROM  
Artikel a left JOIN (SELECT Inventur.ean,  
                        IIF(IsNull(Sum( Inventur.menge )), 0, Sum( Inventur.menge ))  as Menge  
             from Inventur ....
Bitte verwende auch du in Zukunft die Codeformatierung und vor allem gib das verwendete Datenbanksystem an.

Denn es gibt entscheidende Syntaxunterschiede- wie du selbst hier erlebt hast - zwischen dem SQL von mySQL, Access, Oracle oder MSSQL.

Grüße
Biber
Bitte warten ..
Mitglied: boesi666
24.12.2011 um 13:27 Uhr
ja, danke, da steht aber nicht, wie man bei dem rückgabewert false auch in gleichen moment einen wert setzen kann...
Bitte warten ..
Mitglied: boesi666
24.12.2011 um 13:34 Uhr
Zitat von Biber:
Moin boesi666,

nur als Ergänzung zu Indrador.

-> die Änderung in deinem Statement sollte hinauslaufen auf ein
SELECT  ... 
> .. INTO.... 
> FROM  
> Artikel a left JOIN (SELECT Inventur.ean,  
>                         IIF(IsNull(Sum( Inventur.menge )), 0, Sum( Inventur.menge ))  as Menge  
>              from Inventur .... 
> 
Bitte verwende auch du in Zukunft die Codeformatierung und vor allem gib das verwendete Datenbanksystem an.

Blöde frage, wie macht Ihr das beim verfassen eines beitrages, damit es in der codeformatierung dargestellt wird? tragt ihr vorhher und hinterher per hand
01.
 und  
ein?
Denn es gibt entscheidende Syntaxunterschiede- wie du selbst hier erlebt hast - zwischen dem SQL von mySQL, Access, Oracle oder
MSSQL.

>ja, es ist eine access db, die ich in meinen vb6 Projekt mit Microsoft.Jet.OLEDB.4.0 ansprechen tue uns meine Abfagen dann immer so starte. Bei anderen Arbeiten arbeite ich mit einer mysql DB unter linux, wobei ich dann in der regel zwischen dieser mysql DB und der access db hier mit den befehlen fast immer identische arbeitsweisen habe...aber kleine unterschiede gibt es dann eben doch hin und wieder...
Bitte warten ..
Mitglied: Biber
24.12.2011 um 14:02 Uhr
Moin boesi666,

wobei .... in der regel zwischen dieser mysql DB und der access db ... fast immer identische arbeitsweisen habe

Ich sach ma' so....
Eine schnell skizzierte Access-Desktop-Datenbank als proof-of-concept für das Design einer "echten" Datenbank...
-> das geht in Ordnung.
Aber es sollte und darf nicht angestrebt werden, die vollständige Funktionalität nachbilden zu wollen.
Access war schon immer ein ungeliebtes Redmonder Stiefkind, und der Implementierungsumfang des JET-SQL hatte immer nur Demo-Charakter. Gedacht dafür, Heimanwendern die Angst vor Datenbanken zu nehmen oder auch um Appetit auf eine "echte" Datenbank zu machen.

Steck also in diese Access-Entwicklung nicht zuviel Aufwand rein.
Denn so viele Verrenkungen brauchst du später unter mySQL gar nicht machen.

Auch dieses ganze Gewurschtele mit
"IIF(Isnull(bla), dann 0, sonst bla)"
..reduziert sich unter mySQL wieder auf ein simples
"COALESCE(bla, 0)"

Die Frage nach der Codeformatierung hast du dir eigentlich eindrucksvoll selbst beantwortet.

Wenn dann für diesen Beitrag keine weiteren Fragen offen sind, dann...
-> Haken dran

und Frohes Fest
Biber
Bitte warten ..
Ähnliche Inhalte
VB for Applications
Mehrere Spalten Durchsuchen und Ergebnisse in neuer Tabelle Ausgeben
Frage von Mr.GreenVB for Applications3 Kommentare

Hallo liebe Community. Ich würde gerne mit einer VBA mehrere Spalten ("A:W") in einer Tabelle nach einem oder mehreren ...

Datenbanken
SQL Abfrage: Ergebniss aus einer Tabelle mit Bedigung aus einer 2. Tabelle
gelöst Frage von holiboliDatenbanken4 Kommentare

Ausgangslage: Tabellen Auf.Texte Auf_Dokumente Inhalt (den ich brauche): Auf_Texte: AUF_Texte.Z_Dokumenttyp AUF_Texte.SprachePRO AUF_Texte.Z_Unser_Zeichen AUF_Texte.TextfeldRTF (Nur dieses sollte am schluss angezeigt ...

Microsoft Office
Excel-Werte eingeben und in neue Tabelle schreiben
gelöst Frage von werner1966Microsoft Office9 Kommentare

Hallo Leute, Ich hätte da mal bitte einen Lösungsvorschlag von Euch zu Excel oder Libre Calc: Mein Wissen ist ...

Datenbanken
PHPMyAdmin "Tabelle leeren" Button
Frage von lord-iconDatenbanken5 Kommentare

Ich hatte kürzlich die PHPMyAdmin Version mal auf den aktuellen Stand gebracht. In meiner alten Version hatte ich oben ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...

Batch & Shell
Shell-Skript - Syntax error: Unterminated quoted string
Frage von newit1Batch & Shell13 Kommentare

Hallo Ich schreibe ein Skript das eine CSV-Datei in eine mySQL Datenbank schieben soll. Bekomme nach start des Skrips ...

E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Windows Server
DNS Forwarding an andere Domäne
Frage von detox91Windows Server9 Kommentare

Hallo, für Testzwecke haben wir bei uns eine zweite Windows Domäne (B.local) aufgebaut, welche komplett unabhängig und isoliert der ...