Announcement

Collapse
No announcement yet.

Hilfe bei WHERE

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hilfe bei WHERE

    Hallo und guten Abend,
    mühe mich vergeblich ein SELECT mit WHERE hinzubekommen. Kann jemand helfen?

    Wir haben eine Tabelle, die ein Feld C7105 (erste Spalte) enthält. Darin stehen die Medikamenten-Einnahmen für morgens, mittags, abends und nachts, getrennt durch Bindestriche. Muss auch so bleiben (Vorgabe).
    1-0-0-0 1
    ½-0-½-0 1
    1½-1-1-½ 4
    20-20-20-0 60
    ½-0-0-0 0,5
    Ich brauche die Gesamtmenge an einem Tag (Spalte 2). Hab folgendes SELECT erstellt:
    Code:
    SELECT C7105,
    SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(REPLACE(C7105,'1½',1.5),'½',0.5),'-', 1), '-', -1)+
    SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(REPLACE(C7105,'1½',1.5),'½',0.5),'-', 2), '-', -1)+
    SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(REPLACE(C7105,'1½',1.5),'½',0.5),'-', 3), '-', -1)+
    SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(REPLACE(C7105,'1½',1.5),'½',0.5),'-', 4), '-', -1) AS summe
    FROM t710 WHERE (LENGTH(C7105) - LENGTH(REPLACE(C7105,'-','')))=3
    Das lässt alle Werte in Spalte 1 unberücksichtigt, die nicht dem Schema X-X-X-X entsprechen und funktioniert prima. Nun möchte ich auch noch die Zeilen auslassen, deren Wert in Spalte 2 unter 10 liegt. Das sind meist Tropfen oder Insulindosen, die bei der gewünschten Statistik nichts aussagen und nicht ausgewertet werden sollen. Ich habe zwar ein ALIAS für die Summe angegeben und erhalte auch bei Ausführung als Spaltenüberschrift "summe". Aber ein WHERE ... AND summe<10 funktioniert nicht. Hab auch mit REGEXP und SUM experimentiert, aber bin nicht zum Ziel gekommen. Wie muss man das richtig machen?

    Viele Grüße
    Norbert

  • #2
    where (length(c7105) - length(replace(c7105,'-','')))=3
    AND spalte2>=10
    Christian

    Comment


    • #3
      Danke! Du hast den Rechner wohl immer unterm Arm ;-)
      spalte2 habe ich nicht in der Tabelle, sondern nur im SELECT bzw. im Ergebnis des SELECT. Deshalb komme ich Dummy auch nicht zurecht. Oder hab ich nen Denkfehler und seh den Wald vor lauter Bäumen nicht?

      Comment


      • #4
        Wenn einer deiner
        SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(REPLACE(C7 105,'1½',1.5),'½',0.5),'-', 2), '-', -1)+
        die Spalte 2 ist, dann das gleiche im WHERE
        ....AND SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(REPLACE(C7 105,'1½',1.5),'½',0.5),'-', 2), '-', -1)+ >=10
        ggf. noch auf einen INT casten
        Christian

        Comment


        • #5
          Aber die Spalte2 ist die Summe aus allen vier gesplitteten Werten. Demzufolge müsste ich alle vier SUBSTRING_INDEX ... schreiben. Da das ja soooo lang ist, hatte ich gedacht, ich vergebe dafür einen ALIAS? Geht das nicht?

          Comment


          • #6
            Nein das geht nicht mit einem Alias
            Christian

            Comment


            • #7
              Und wie wäre ein geschachteltes SELECT? Hab sowas schon irgendwo mal gesehen.

              Comment


              • #8
                Nein
                Jedenfalls nicht in der Form
                SELECT SPALTE1,
                (select <DEINE_BERECHNUNG> from TABELLE sub WHERE f.ID=sub.ID ) as SUMME
                FROM TABELLE f where SUMME>=10;

                Du kannst eine StoredProcedure schreiben und der die Spalte1 zur Auswertung übergeben

                select SPALTE1,DEINE_PROCEDURE(SPALTE1)as summe from Tabelle where ....AND DEINE_PROCEDURE(SPALTE1)>=10

                oder

                mit dem WITH Statement erst eine Tabelle mit der Berechnung anlegen und dann im select auf diese zugreifen

                https://dev.mysql.com/doc/refman/8.0/en/with.html
                Zuletzt editiert von Christian Marquardt; 04.04.2022, 20:51.
                Christian

                Comment


                • #9
                  Danke Christian. Bei WITH schwirrt mir der Kopf, als ich Deinem Link gefolgt bin. Da werfe ich das Handtuch. Aber eine SP ist eine gute Idee. Vielleicht gelingt es mir, da alles hineinzupacken und sie mit Parametern aufzurufen. Ich könnte dann gleich alles was ich brauche als Werte zurückgeben. Mal sehen ...
                  Viele Grüße
                  Norbert

                  Comment


                  • #10
                    WITH ist eine "temporäre Tabelle".
                    Die wird nach dem With "befüllt"
                    Dann kann man in einem select auf diese zugreifen

                    Christian

                    Comment

                    Working...
                    X