Beiträge von Schnurze

    folgende Abfrage läuft einwandfrei:



    SET lc_time_names = 'de_DE';


    SET @J = '2018';


    SET @J1 = @J + '1';


    CREATE TEMPORARY TABLE IF NOT EXISTS test AS(


    SELECT

    MONTHNAME(T.ausgang) AS Monat,

    bla bla AS '2018',

    (SELECT

    bla, bla) AS '2019'




    FROM

    xy.table


    WHERE


    Bedingungen


    GROUP BY MONTH(T.ausgang));


    SELECT


    Monat,


    `2018`,


    `2019`,


    REPLACE(ROUND(REPLACE (`2019`, ',' , '.')* 100 / REPLACE(`2018`, ',' , '.')- 100,2),'.',',') AS Dif


    from test;


    DROP TEMPORARY TABLE test;



    Mein Problem ist nunmehr die Jahressumme zu bilden.


    Ein einfaches Union scheitert mit der Fehlermeldung, dass Table test nicht 2 mal geöffnet werden kann.


    Der Versuch einfach test in test2 zu kopieren und dann Union wird von PHPMYADMIN mit dem Einfügen von LIMIT 0,25 zerschossen. Was gibt es noch für Möglichkeiten?

    Sollte so doch auch eigentlich mit jeder anderen DBMS funzen: Die Rechnungsnummer wird aufgrund des DateTimestamps erstellt, also mehrere gleiche DateTime = eine Rechnungnummer (mit mehreren Art.), nächste DateTime = nächste Rechnungsnummer, ergo gleichviele Datensätze in beiden Tabellen (bei entsprechender Summierung) und gleiche Sortierung, wenn einmal nach DateTime und bei der anderen nach Rechnungsnummer sortiert wird.

    OK - Danke für die Hilfe, habe das jetzt selbst lösen können. Falls jemand wissen will wie, hier meine Lösung:
    Die Rechnungsnummer (auto_increment) aus der 2. Tabelle ist ja via dem Feld 'Ausgang' (DateTime) mit der 1. Tabelle verknüpft.
    Also TEMPORARY TABLE aus 1. Tabelle mit Summieren/Gruppieren und Ordnen auf 'Ausgang', dann ID Spalte (auto_increment) hinzufügen.
    TEMPORARY TABLE aus 2. Tabelle ordnen nach Rechnungsnummer, dann ebenfalls ID Spalte hinzufügen.
    Alles natürlich für das gleiche Datum und dann Abfrage nach gleicher ID et voila....
    Es Funktioniert genau so, wie es soll. Wenn jemand was einfacheres, besseres oder/und eleganteres weiss, einfach nur posten.

    Also um das Thema nochmals aufzugreifen vereinfache ich mal:
    in der Tabelle 1 habe ich ein Datetime Feld, eine KdNr und ein Betrag.
    in der Tabelle 2 habe ich ein Datum , eine KdNr und eine ReNr.
    Die Abfrage soll nun nur alle ReNr, KdNr, Beträge pro Tag auflisten.
    Mein Problem sind halt mehrere gleiche Kunden an einem Tag,
    also wie bekomme ich es hin, dass die erste ReNr pro Kunde nur dem ersten Datetime zugeordnet wird?

    Also bitteschön:


    TABLE pakete (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `po` INT(30) NULL DEFAULT NULL, das ist die Kundennummer
    `size` VARCHAR(100) NULL DEFAULT NULL,
    `status` INT(2) NULL DEFAULT NULL, das ist ein Schalter: 0 Art. ist nicht da, 1 Art. ist da
    `lagerort` VARCHAR(100) NULL DEFAULT NULL,
    `eingang` DATETIME NULL DEFAULT NULL,
    `ausgang` DATETIME NULL DEFAULT NULL, Zeitpunkt an dem die Rechnung erstellt wurde
    `aname` VARCHAR(250) NULL DEFAULT NULL,
    `aadress` VARCHAR(250) NULL DEFAULT NULL,
    `aplz` VARCHAR(100) NULL DEFAULT NULL,
    `aort` VARCHAR(250) NULL DEFAULT NULL,
    `aland` VARCHAR(250) NULL DEFAULT NULL,
    `quittung` INT(1) NULL DEFAULT NULL,
    `entsorgung` VARCHAR(15) NULL DEFAULT NULL das ist eine Zusatzleistung in Euro
    )


    TABLE preise (
    `id` INT(10) NOT NULL,
    `groesse` VARCHAR(100) NOT NULL DEFAULT '',
    `preis` VARCHAR(10) NULL DEFAULT NULL
    )


    TABLE rechnungen (
    `rechnungsnr` INT(20) NOT NULL AUTO_INCREMENT,
    `kundennr` INT(20) NOT NULL,
    `file` VARCHAR(300) NOT NULL, hier steht der Speicherort des PDFs der Rechnung
    `rechnungsdatum` DATE NOT NULL
    )


    Ich hab mir auch schon gewünscht, diejenigen in den Hintern zu treten, die das verbrochen haben. Und in der Datenbank sind gute 100 Tabellen, die nach der gleichen Logik aufgebaut sind. Und mit PHP und Wordpress veröffentlicht. Und funktionierend. Probleme gibts halt nur bei Änderungen / Erweiterungen.

    Jep, würde ich auch so oder doch so ähnlich aufbauen. Nütz mir aber nichts, da ich mich mit diesen Vorgaben herumschlagen darf.
    Warum sich das Datum der Rechnung nicht in der rechnungen Tabelle befindet, ist mir auch rätselhaft. Aber so ist das halt.
    Ändern will ich da nur sehr ungern etwas, da mit diesen Tabellen alle möglichen Abfragen, Auswertungen Kron-Jobs etc. verknüpft sind - frei nach dem Motto: Never change a running system.


    Nichtsdestotrotz habe ich noch mein Problem mit den 'falschen' Mehrfachrechnungen. Ich mache ja eigentlich nichts weiter als die Summen zu bilden. Ich erhalte ja mit der obigen Abfrage trotz teilweiser falscher Rechnungssummen den richtigen Tagessaldo (Keine Berücksichtigung der einzelnen Rechnungen bei UNION). Wenn ich ne Abfrage mit GROUP BY WITH ROLLUP mache, entspricht das Ergebnis zwar der Summe der Einzelrechnungen, ist damit aber leider falsch. Wie bekomme ich korrekte Rechnungssummen bei Mehrfachrechnungen?


    Beispiel:
    02.11.2018 26191 2552 13,00 korrekt wäre 3,50
    02.11.2018 26192 2552 13,00 korrekt wäre 3,00
    02.11.2018 26193 2552 13,00 korrekt wäre 3,50
    02.11.2018 26194 2552 13,00 korrekt wäre 3,00


    Ich habe also 4 Rechnungen für KdNr 2552, die ja auch nach meinen Bedingungen richtig berechnet werden, aber halt leider das falsche Ergebnis liefern. Wie mache ich das richtig?
    Also Bedingung benutze pro Rechnung nur das gleiche DATETIME (T.ausgang) oder ähnlich...

    [INDENT] Vielen Dank. Hatte ich genau so gemacht und dann festgestellt, dass ich andere Tagessummen erhalte, wie bei der Einzelberechnung...
    Ich habe daher ein ganz anderes Problem.
    Zum Berechnen der Rechnungen brauche ich 3 Tabellen.
    In der Tabelle pakete befinden sich u.a. die Kundennummer T.po (natürlich als VARCHAR...), der Zeitpunkt der Rechnungserstellung T.ausgang(Datetime) und die Größe T.size (VARCHAR).
    In der Tabelle preise befinden sich die Größe P.groesse (VARCHART) und die Preise P.preis ( VARCHART, was sonst..).
    In der Tabelle rechnungen befinden sich Rechnungsnummer R.rechnungsnr (selbstredend VARCHART) und Kundennummer R.kundennr (VARCHART) sowie Rechnungsdatum R.rechnungsdatum (wirklich DATE, da muss jemand wohl nen Geistesblitz gehabt haben).
    Mit meiner obigen Abfrage bekomme ich zwar den richtigen Tagessaldo, allerdings fehlerhafte Rechnungssummen, wenn ein Kunde mehrere Rechnungen pro Tag erhält. Es werden pro Rechnung alle Einzelsummen addiert. Wie bekomme ich das hin?
    [/INDENT]

    Hi,
    mit folgender Abfrage:


    erhalte ich wunschgemäß die Tagessumme:


    generated 2018-11-17 13:42:28 by HeidiSQL 9.4.0.5125

    Wie bekomme ich nun daraus eine Monatssumme?

    Es ist echter Code mit echten Daten (wenn auch nur als Test) und natürlich ist Nachname NULL durch die Summenbildung mit group by with rollup.

    Code
    1. select
    2. # ifnull (Nachname,'Summe') as Name,
    3. Nachname as Name,
    4. MAX(cast(Zähler as decimal(5,0))) as Zahl,
    5. SUM(cast(Zähler as decimal(5,0))) as Betrag
    6. from
    7. test
    8. group by
    9. Nachname with rollup

    liefert:


    generated 2018-11-12 08:45:28 by HeidiSQL 9.4.0.5125

    Aber genau das ist mein Problem: Ich habe einen genau definierten Wert für Nachname (ISNULL) in der Summenzeile, für alle folgenden Spalten wird halt irgend etwas eingefügt und das hätte ich halt gern gelöscht. Klar kann ich die Zählerspalte durch eine Funktion ersetzen, z.B. Max, aber damit erhalte ich halt auch nur wieder irgendeinen Wert, den ich so auch nicht ändern kann.


    BTW Die original Daten kommen aus 3 Tabellen. Die will ich in einer temp. Tabelle sammeln, womit VARCHAR für Zahlen und Umlaute in den Spaltenüberschriften entfallen.

    Hi,
    mit folgender Tabelle:


    und folgenden Daten:



    generated 2018-11-10 16:56:33 by HeidiSQL 9.4.0.5125

    führe ich folgende Abfrage durch:

    Code
    1. select
    2. ifnull (Nachname,'Summe') as Name,
    3. Zähler,
    4. SUM(cast(Zähler as decimal(5,0))) as Betrag from test
    5. group by Nachname with rollup


    und erhalte wunschgemäß folgendes Ergebnis mit Teil- und Gesammtsumme:



    generated 2018-11-10 17:00:54 by HeidiSQL 9.4.0.5125


    Jetzt stört mich nur noch der Zähler '12' in der (Gesammt-)Summen Zeile. Wie kann ich den auf "" setzen? Hab schon alles mögliche ausprobiert und bin nun ratlos.
    Irgendwelche Ideen?

    Gibt es eine Möglichkeit Abfragen zu vergleichen?


    Mir geht es konkrekt darum einen Abgleich einer wöchentlichen Abfrage mit der Abfrage der Vorwoche zu erstellen, wobei die Daten der Vorwoche, sofern in der aktuellen Abfrage enthalten, in dieser neuen Abfrage nicht mehr enthalten sein sollen. Geht das?

    Ähm, bringt aber immer noch 11 Zeilen, wenn jetzt aber auch in jeder Zeile das richtige Ergebnis steht.....
    Die Spaltenüberschriften heissen jetzt aber alle Value, bis auf die Erste, die heisst noch Kd.Nr.


    - - - Aktualisiert - - -


    Mit den folgenden Änderungen geht es:


    Also das GROUP BY wars dann wohl.
    Vielen Dank soweit. Das war allerdings erst die halbe Miete. Die eigentliche Abfrage erstreckt sich über 2 Tabellen. Mal schauen, ob es da auch noch läuft....

    Hi,


    bin neu hier und relativ neu bei MariaDB und habe natürlich ein Problem, naja wohl eher ein Problemchen...
    Also folgendes:
    Tabelle data mit vier Spalten ID, USER_ID, FIELD_ID, VALUE.
    ID gibt jeder Zeile einen festen Wert,
    USER_ID ist 11 mal der gleiche Wert, der jeweils einer FIELD_ID zugeordnet ist, VALUE ist der eigentliche Wert. Das wiederhohlt sich fortlaufend. Also jeder Kunde (USER_ID) besteht aus 11 Einträgen (FIELD_ID von 1 bis 11) deren Werte wie Anschrift, Tel. etc in VALUE stehen.
    Mein Problem: Wie bekomme ich eine Abfrage hin, bei der Kd.Nr. Vorname, Nachname, Telefon in einer Zeile stehen?
    Mein Ansatz:

    SQL
    1. SELECT `USER_ID` `Kd. Nr.` , (select `VALUE` where `FIELD_ID` = 7) as Vorname, (select `VALUE` where `FIELD_ID` = 9) as Nachname, (select `VALUE` where `FIELD_ID` = 6) as Telefon FROM `data` where `USER_ID` = 967


    Liefert mir zwar die benötigten Daten, aber halt in 11 Zeilen.
    Sorry für so ein kleines Anfängerproblem, aber könntet ihr mir trotzdem helfen?