timt: Daten Spaltenweise auslesen (nicht Zeilenweise)

Hallo,

kann ich bei einer Datenbankabfrage (SQL) die Daten auch Spaltenweise ausgeben? Also wenn ich z.b 2 Felder hab (feld1 und feld2), dass ich dann zuerst alle Werte von feld1 ausgebe und danach erst die Werte von feld2?

hoffe ihr versteht was ich meine.. :)

  1. Hallo,

    kann ich bei einer Datenbankabfrage (SQL) die Daten auch Spaltenweise ausgeben? Also wenn ich z.b 2 Felder hab (feld1 und feld2), dass ich dann zuerst alle Werte von feld1 ausgebe und danach erst die Werte von feld2?

    meinst Du soetwas wie eine Kreuztabellenabfrage?
    Jet-SQL (der SQL-Dialekt von MS-Access) kann das, T-SQL seit MS SQL Server 2005 auch, MySQL nach meinem Wissensstand nicht.

    Wie es bei anderen Datenbankmanagementsystemen bzw. SQL-Dialekten aussieht weiß ich nicht. Was willst Du genau erreichen. In vielen Fällen kann man diese Funktionalität mit einer Stored Procedure nachbilden. Sonst bleibt Dir nur noch Deine Anwendung.

    Freundliche Grüße

    Vinzenz

    1. Hallo,

      kann ich bei einer Datenbankabfrage (SQL) die Daten auch Spaltenweise ausgeben? Also wenn ich z.b 2 Felder hab (feld1 und feld2), dass ich dann zuerst alle Werte von feld1 ausgebe und danach erst die Werte von feld2?

      meinst Du soetwas wie eine Kreuztabellenabfrage?
      Jet-SQL (der SQL-Dialekt von MS-Access) kann das, T-SQL seit MS SQL Server 2005 auch, MySQL nach meinem Wissensstand nicht.

      Wie es bei anderen Datenbankmanagementsystemen bzw. SQL-Dialekten aussieht weiß ich nicht. Was willst Du genau erreichen. In vielen Fällen kann man diese Funktionalität mit einer Stored Procedure nachbilden. Sonst bleibt Dir nur noch Deine Anwendung.

      Freundliche Grüße

      Vinzenz

      Also ich will einfach die einzelnen Felder direkt untereinander haben, damit sie verglichen werden können... und ich benutze mysql...

      1. Hallo,

        ich verändere mal die Reihenfolge der Zitate, damit manches klarer wird. [1]

        Jet-SQL (der SQL-Dialekt von MS-Access) kann das, T-SQL seit MS SQL Server 2005 auch, MySQL nach meinem Wissensstand nicht.

        Also ich will einfach die einzelnen Felder direkt untereinander haben, damit sie verglichen werden können... und ich benutze mysql...

        Ich sage: MySQL kann das nicht, Du sagst Du benutzt MySQL.
        => Mit einer einfachen SQL-Anweisung geht es nicht.

        Wie es bei anderen Datenbankmanagementsystemen bzw. SQL-Dialekten aussieht weiß ich nicht. Was willst Du genau erreichen. In vielen Fällen kann man diese Funktionalität mit einer Stored Procedure nachbilden.

        Stored Procedure sollte gehen, wenn Deine MySQL-Version eine 5.x ist.

        SELECT VERSION()

        gibt Auskunft über Deine Version.

        Sonst bleibt Dir nur noch Deine Anwendung.

        Also ich will einfach die einzelnen Felder direkt untereinander haben, damit sie verglichen werden können...

        Nebeneinander können die doch genausogut verglichen werden, finde ich.
        Bitte gib doch ein konkretes Beispiel mit Daten an, vielleicht fällt es dann leichter, zu einer Lösung zu kommen.

        Freundliche Grüße

        Vinzenz

        [1] Komplettzitate erzeugen unnötig Datenmüll und sind schwer zu lesen.

        1. Hmm das muss doch irgendwie gehen? Also des sind halt ziemlich viele Felder, in denen teilweise auch viel text steht...

          Irgendwie muss es da doch ne möglichkeit geben...

          1. yo,

            Irgendwie muss es da doch ne möglichkeit geben...

            das geht auch ganz einfach mit dem UNION operator.

            SELECT spaltename1 AS spalte1
            FROM tabelle
            WHERE hier_eventuelle_bedingungen
            UNION
            SELECT spaltename2
            FROM tabelle
            WHERE hier_eventuelle_bedingungen
            UNION
            SELECT spaltename3
            FROM tabelle
            WHERE hier_eventuelle_bedingungen

            und so weiter, je nachdem wieviele spalten du ansprechen willst. musst nur aufpassen, dass die spalten vom gleichen datentyp sind, bzw. wenn nicht dann umwandeln.

            Ilja

            1. Hallo Ilja,

              SELECT spaltename1 AS spalte1
              FROM tabelle
              WHERE hier_eventuelle_bedingungen
              UNION
              SELECT spaltename2
              FROM tabelle
              WHERE hier_eventuelle_bedingungen
              UNION
              SELECT spaltename3
              FROM tabelle
              WHERE hier_eventuelle_bedingungen

              wie kriegst Du mit Deinem einfachen UNION die zweite Zeile in die zweite Spalte, die dritte Zeile in die dritte Spalte, ...

              Freundliche Grüße

              Vinzenz

              1. yo,

                wie kriegst Du mit Deinem einfachen UNION die zweite Zeile in die zweite Spalte, die dritte Zeile in die dritte Spalte, ...

                indem ich pseudospalten anlege und danach entsprechend sortiere.

                (SELECT spaltename1 AS spalte1, 1 AS sort
                 FROM tabelle
                 WHERE hier_eventuelle_bedingungen
                )
                UNION
                (
                 SELECT spaltename2, 2
                 FROM tabelle
                 WHERE hier_eventuelle_bedingungen
                )
                ORDER BY sort, zweite_sortierung_zumbeispiel_datum

                Ilja

                1. Hallo Ilja,

                  wie kriegst Du mit Deinem einfachen UNION die zweite Zeile in die zweite Spalte, die dritte Zeile in die dritte Spalte, ...

                  indem ich pseudospalten anlege und danach entsprechend sortiere.

                  jetzt sind wir von MySQL 4.0 bereits zu MySQL 4.1 gekommen :-)

                  (SELECT spaltename1 AS spalte1, 1 AS sort
                  FROM tabelle
                  WHERE hier_eventuelle_bedingungen
                  )
                  UNION
                  (
                  SELECT spaltename2, 2
                  FROM tabelle
                  WHERE hier_eventuelle_bedingungen
                  )
                  ORDER BY sort, zweite_sortierung_zumbeispiel_datum

                  Was machst Du bei einer unbekannten Anzahl Zeilen ;-)
                  Im konkreten Fall könnte es ja reichen. Aber eine Stored Procedure fände ich flexibler, erfordert halt MySQL 5.x.

                  Freundliche Grüße

                  Vinzenz

                  1. yo Vinz,

                    jetzt sind wir von MySQL 4.0 bereits zu MySQL 4.1 gekommen :-)

                    keine ahnung, ab wann mysql pseudospalten, bzw. Union kann. Würde mich aber wundern, wenn es das nicht schon vor 4.1+ können würde. zum anderen schlägst du ja als alternative ein stored procedure vor, die erst mit 5.x umsetzbar ist, setzt also noch mehr vorraus. insofern kann das nicht wirklich ein kritikpunkt sein.

                    Was machst Du bei einer unbekannten Anzahl Zeilen ;-)

                    gar nichts, weil mein vorschlag unabhängig von der anzahl der zeilen ist.

                    Im konkreten Fall könnte es ja reichen.

                    darauf kommt es aber meistens drauf an, für eine bestimmte problemstellung eine gute lösung zu finden. man muss nicht immer gleich die ganze welt mit erschlagen.

                    gruß
                    Ilja