Announcement

Collapse
No announcement yet.

Datum as Spaltenname in mysql SP

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

  • Datum as Spaltenname in mysql SP

    Hallo zusammen,

    ich möchte mit Hilfe einer Stored Procedure eine Kreuztabelle erstellen.
    Mit diesem Code aus dem unglaublichen Internet klappt das bei mir auch.

    http://www.databasejournal.com/featu...Procedures.htm

    Das Problem was mich zu verzweifeln bringt, ist die Übergabe eines Datums aus der DB an die SP und die Weiterverarbeitung. Fehler ist wohl der Bindestrich im Datumsformat, der nicht als Spaltenname akzeptiert wird.

    Meiner Vermutung nach muss in diesem Teil der SP etwas geändert werden.
    Habe verschiedene "Replace" und andere Funktionen ohne Erfolg probiert.

    Auszug aus Link
    [highlight=sql]
    " group_concat( DISTINCT concat(\t\" AggFld_\", ", SortColumnField, ",", "\n",
    "\t\t\t\t\t\t\t\t\t\" AS '", ColumnFieldAlias, " \", ", SortColumnField, ", \"',\", \"\\n\"", "\n",
    " )", "\n",
    " order by ", SortColumnField, "\n",
    [/highlight]

    Wer hat eine Idee wie ich die Variable "SortColumnField" als Spaltenüberschrift durch die SP bekomme ?


    Hier der Aufruf:
    call p_case_counts_per_region_by_month("max", # Aggregat Funktion
    "einsatz", # Kreuzung
    "VorNachname", # Reihe
    "Tag", # Überschrift Spalte
    "Name", # Überschrift Reihe
    "VorNachname", # Sort Reihe
    "datum", # Sort Spalte
    "t_einsatz ", # Tabelle
    "id between 1505 and 1511 "); # Where Klausel


    Fehler ist
    Unknown column 'AggFld_2005' in 'field list'

    Wobei 2005 das Jahr aus dem Datum ist.
    Wie gesagt die SP ist vollkommen i.O solange kein Datum als Spaltenkopf genommen wird.

    In freudiger Erwartung

    Gruß Pinky
    Zuletzt editiert von Pinky; 19.05.2010, 17:04.

  • #2
    Hallo,

    1. Richtiges Forum wählen!
    2. Formatierung von SQL in Beiträgen

    Den ersten Punkt hab ich schonmal für dich gemacht...
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Originally posted by Pinky
      ...Fehler ist
      Unknown column 'AggFld_2005' in 'field list'
      Gibt es denn ein Feld AggFld_2005 in der Tabelle?

      Und warum den Post jetzt zweimal? Editieren des Ersten hätte gereicht!
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Datum as Spaltenname in mysql SP

        Und warum den Post jetzt zweimal? Editieren des Ersten hätte gereicht!
        War mir nicht sicher ob der alte Tread noch beachtet wird.

        Gibt es denn ein Feld AggFld_2005 in der Tabelle?
        Nein, dieses Feld gibt es nicht. "AggFld" ist m. E. die tempräre Bezeichnung des Spaltennamens im Zwischenschritt der SP.

        "2005" ist der erste Teil des Datums aus der DB. Ich wäre einen Schritt weiter wenn anstatt "AggFld_2005" dieses Ergebnis kommen würde.

        "AggFld_2005-03-14"

        Comment


        • #5
          Hallo,
          Originally posted by Pinky View Post
          War mir nicht sicher ob der alte Tread noch beachtet wird.
          Da ich mir sicher bin habe ich den Doppelpost gelöscht!

          Originally posted by Pinky View Post
          ...Nein, dieses Feld gibt es nicht. "AggFld" ist m. E. die tempräre Bezeichnung des Spaltennamens im Zwischenschritt der SP.
          Dann brauchst du dich über
          Originally posted by Pinky View Post
          ...Unknown column 'AggFld_2005' in 'field list'
          nicht zu wundern. Und was heißt "m. E."? Heist das Feld so oder nicht?
          Originally posted by Pinky View Post
          ..."2005" ist der erste Teil des Datums aus der DB. Ich wäre einen Schritt weiter wenn anstatt "AggFld_2005" dieses Ergebnis kommen würde.

          "AggFld_2005-03-14"
          Gibt es denn das Feld AggFld_2005-03-14 in der Tabelle?
          Im Übrigen ist das ganze aus deinem minimalistischen Stück Code nicht nachvollziehbar. Es ist z.B. nicht erkennbar, um was für ein Statement es sich handelt. Select, Update, Subquery?
          Vlt. solltest du mal ein aussagekräftiges Bsp. machen und dabei das unwesentliche (die gefühlten tausend Tabulatoren und Zeilenumbrüche z.B. ) weglassen und die wesentlichen Dinge hinzufügen.

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Hallo Falk,

            Gibt es denn das Feld AggFld_2005-03-14 in der Tabelle?
            Nein, die gibt es auch nicht in meiner DB.

            Bitte um Nachsicht, dass ich den Code der SP nicht editiere, da ich bei den Tabulatoren das Problem vermute.

            Hier ist der gesamte Code der SP.


            Code:
             CREATE PROCEDURE `p_case_counts_per_region_by_month` (IN AggregateFunction VARCHAR(64),
                                                                  IN ColumnField       VARCHAR(64),
                                                                  IN RowField          VARCHAR(64),
                                                                  IN ColumnFieldAlias  VARCHAR(64),
                                                                  IN RowFieldAlias     VARCHAR(64), 
                                                                  IN SortRowField      VARCHAR(64),
                                                                  IN SortColumnField   VARCHAR(64),
                                                                  IN Tables            VARCHAR(64),
                                                                  IN Criteria          VARCHAR(64))
            LANGUAGE SQL 
            NOT DETERMINISTIC 
            CONTAINS SQL 
            SQL SECURITY DEFINER 
            BEGIN  
            SELECT concat(
              "SELECT concat(", "\n",
              "    \"SELECT CASE WHEN sort_row_alias IS NULL\", \"\\n\",", "\n", 
              "    \"            THEN 'TOTAL'\", \"\\n\",", "\n", 
              "    \"            ELSE row_name\", \"\\n\",", "\n", 
              "    \"       END        AS '", RowFieldAlias, "',\", \"\\n\",", "\n",
              "    group_concat( DISTINCT concat(\t\"       AggFld_\", ", SortColumnField, ",", "\n", 
              "\t\t\t\t\t\t\t\t\t\"  AS '", ColumnFieldAlias, " \", ", SortColumnField, ", \"',\", \"\\n\"", "\n",
              "                )", "\n",
              "                order by ", SortColumnField, "\n",
              "                separator ''", "\n", 
              "                ),", "\n",
              "    \"       TOTAL\", \"\\n\",", "\n",
              "    \"FROM  ( SELECT   ", SortRowField, "\t\t\t\t\t\t\t\tAS sort_row_alias,\", \"\\n\",", "\n",
              "    \"                 ", RowField, "\t\t\t\t\t\t\t\tAS 'row_name',\", \"\\n\",", "\n",  
              "    group_concat(", "\n", 
              "        DISTINCT concat(\"\t\t\t\t", AggregateFunction, "(CASE WHEN ", SortColumnField, " ='\", ", SortColumnField, ",", "\n",
              "                        \"' THEN ", ColumnField, " ELSE NULL END) AS 'AggFld_\",", "\n"
              "                        ", SortColumnField, ", \"',\", \"\\n\"", "\n",
              "                 )", "\n"
              "        order by ", SortColumnField, "\n",
              "        separator ''", "\n", 
              "    ),", "\n",
              "    \"        ", AggregateFunction, "(", ColumnField, ")\t\t\t\t\tAS 'TOTAL'\", \"\\n\",", "\n",
              "    \"                 FROM  ", Tables, "\", \"\\n\",", "\n",
              "    \"                 WHERE ", Criteria, "\", \"\\n\",", "\n",
              "    \"                 GROUP BY row_name WITH ROLLUP) AS CA;\"", "\n",
              ") statement", "\n",
              "into @sql_stmt", "\n",
              "FROM ", Tables, "\n",
              "WHERE ", Criteria, ";"
            ) statement 
            into @sql_stmt;
              prepare case_counts_per_region_by_month_stmt
              from @sql_stmt;
              execute case_counts_per_region_by_month_stmt;
              deallocate prepare case_counts_per_region_by_month_stmt;   
              prepare case_counts_per_region_by_month_stmt
              from @sql_stmt;
              execute case_counts_per_region_by_month_stmt;
              deallocate prepare case_counts_per_region_by_month_stmt;   
            END

            Hier der Aufruf der SP

            Code:
            call p_case_counts_per_region_by_month("max", # Aggregat Funktion
            "einsatz", # Kreuzung
            "VorNachname", # Reihe
            "Tag", # Überschrift Spalte
            "Name", # Überschrift Reihe 
            "VorNachname", # Sort Reihe
            "datum", # Sort Spalte
            "t_einsatz ", # Tabelle
            "id between 1505 and 1511 "); # Where Klausel

            Vorschlag zu Güte.
            Erstelle eine Tabelle mit den Spalten
            ID (int)
            VorNachname (varChar)
            einsatz (varChar)
            datum (Date)

            Danach die SP aufrufen. Das ist sicher zielführender als meine Versuche ein Beispiel für eine Prozedur zu basteln die ich nicht verstehe.

            Gruß Pinky
            Zuletzt editiert von Pinky; 21.05.2010, 15:26.

            Comment


            • #7
              Hallo,
              Originally posted by Pinky View Post
              ...Das ist sicher zielführender als meine Versuche ein Beispiel für eine Prozedur zu basteln die ich nicht verstehe.
              OK, wenn dir das zu viel Aufwand ist, dann hab bitte "Nachsicht" wenn ich keinen Bock habe mich durch deine SP zu wurschteln und Syntaxfehler zu suchen

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Hallo Falk,

                dann erst mal danke für Unterstützung.

                Da sich ansonsten niemand an das Thema herantraut und ich es ohne fremde Hilfe nicht schaffe, habe ich einen anderen Weg gewählt.

                Als Notlösung habe ich die Date-Spalte als Char-Spalte umgewandelt. Das klappt wie ursprünglich beschrieben ohne Probleme.

                Hoffe dass die CHAR- Datumsspalte in Zukunft nicht zu viele Probleme bereitet.



                Pinky

                Comment

                Working...
                X