Jump to content

Pathomorph

Members
  • Gesamte Inhalte

    75
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von Pathomorph

  1. Man kann viel machen. Voraussetzung ist aber immer eine saubere Datenbasis.

    Die negativen Lagerbestände sind aber unsinnig und führen zu falschen Ergebnissen.

     

    Wenn du z.B. für ArtNr 4711 in 5 Lagern einen Bestand von -1 hast, in einem 1 und Rest 0:

     

    Du willst eine Übersicht haben, welche Artikel nicht da sind.Welche Erkenntnis kann du aus DIESEM Ergebnis gewinnen?? 

    In dem Beispiel liefert

    -SUM(bestand)   das Ergebnis -4

    -SUM(ABS(bestand)) --> 6

     

    Das richtige Ergebnis ist jedoch 1.. Oder?

  2. 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')

  3. 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')

  4. Mach es bitte gleich richtig und erzeuge ein neues Attribut (Feld) "Nachname"

    Dann kannst du das Attribut "name" parsen und den Nachnamen in das neue Feld einfügen. Schau mal hierfür die mySQL-Funktion "SUBSTRIING_INDEX" mal an.

     

     

    UPDATE blablaTable SET Nachname = SUBSTRING(name,' ',-1)

     

    Damit wird bei einer Splittung des Feldes "name" das 1. rechte Element ermittelt...

     

    Dann kannst du dein ORDER BY mit dem Attribut "Nachname" regulär verwenden... 

     

    Mach es gleich richtig. Wer weiß, was dir morgen wieder einfällt... ;-)

     

    Gruß

  5. Hi

     

    Ich muss dir jetzt sicher nicht sagen, dass du "Name" und "Vorname" trennen sollst oder?!

     

    ... WHERE name LIKE '% H%' ORDER BY SUBSTRING(name,CHARINDEX(' ',name,0)+1,Len(name)-CHARINDEX(' ',name,0))

     

     

    Gruß

  6. Unsere "EndUser" wissen nicht mal was SQL ist... Daher ist das Thema Berechtigungen irrelevant... Es gibt nur einen DB-User, der dbowner ist 

    Ich bastel auf dem SQL-Server Funktionen oder meinetwegen Views, die ich dann von Excel aus "bediene". Der EndUser wählt in Excel nur die Auswertung, die er haben will und basta.

  7. Üblich? Mag sein.. Aber nicht zwingend die richtige(re) Entscheidung. 

    Der Query-Optimizer macht da keine Unterscheidung und der Execution-Plan ist identisch...

     

    Ausserdem habe ich Funktionen, die durchaus komplexer sind. Mit Variablen und mit einer Logik, nicht nur paar Tabellen gejoint und Ausgabefelder angeben...

     

    Gruß

  8. Hi Jogurt

     

    Wenn du "SELECT cast (Datenbank.tagesauswertung.arbeitszeit_anfang as datetime)" ausführst, dann wird Cast die Tage ab dem 3.01.1900 als Datum ausgeben.

    (Excel macht das auch so ähnlich: Gibt mal in Excel 26160 in eine Zelle ein und dann als Datum formatieren. Raus kommt '15.08.1971' )

    Wenn du CAST(26160 -2 as datetime) machst, erhälst du das selbe Datum. -2 da unterschiedliche Basis-Daten verwendet werden.

     

    Zum Problem:

    26160 sind die Sekunden ab Mitternacht.

     

     Willst du den Dezimalwert, musst du die Zahl nur durch  3600 teilen, dann hast du 7,2666.

     

    Wenn du wirklich die reinen Uhrzeiten haben willst, dann musst du so'n Quatsch machen:

     

    SELECT CONVERT(varchar(8), dateadd(minute,Datenbank.tagesauswertung.arbeitszeit_anfang/60,'1900-01-01'),8)

     

    Das Ergebnis ist jedoch ein String(varchar)

     

    Gruß

  9. Nun ja.. Ich habe eine Datenbank mit 268 Tabellen.

    Um Auswertungen machen zu können, brauche ich vorbereitete Daten, die teilweise nur mit Views gehen oder, bei komplexen Daten, mit entsprechenden Funktionen.

    Views mag ich nicht, also rein in eine Tabellenwert-Funktion...

    So entstehen viele UDF's...

     

    Wir haben ca. 300 Kunden, die unterschiedliche Auswertungen brauchen. Bekommen also nur Häppchen davon als Script.

     

    Damit ich aber durch alle Funktionen durchblicke, teilweise Basisfunktionen, teilweise kundenspezifische, brauche ich irgendeine Übersicht. Kann auch ein Editor sein oder Document-Management-System oder gar die Festplatte mit Unterordnern...

  10. Nun.. Ich bin selbst der Entwickler...

    Mit ist das schon bewusste, was bei einer Änderung passiert. 

    Die Funktionen sind aus verschiedenen Bereichen: Type-Converter, Reports zu bestimmten Themen usw. Nur anhand der Namen die Funktionen zu ordnen finde ich schwierig oder ich bin nicht kreativ genug..

     

    Willst du mir also sagen, es gibt nichts in der Richtung? 

     

    Thx für die Antwort

  11. Hi zusammen

     

    Ich habe eine Datenbank mit zig UDFs. Dieser werden jedoch alle unstrukturiert untereinander angezeigt und so blick ich nicht mehr durch, welche Funktion, wofür ist.

    Kann man diese strukturieren? Ich dachte da an eine Ordner-Struktur o.ä.

    Mit Schemas kann man die schon gruppieren, reicht aber nicht ganz aus...

     

    Gibt es ggf. andere Tools, die solche Skripte vernünftig verwalten?

     

    Gruß

×
×
  • Neu erstellen...