SQL Order by (Select Count)

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Jojo0405.

    SQL Order by (Select Count)

    ich habe folgenden SQL-Text der an sich funktioniert. lediglich bei der Order-By Klausel bekomme ich die Fehlermeldung "multiple rows in singleton select.".

    SQL-Abfrage

    1. SELECT K.ID, K.IERLEDIGT, K.THEMA, K.CRDATE FROM KONTAKTE AS K WHERE K.ID IN (SELECT DISTINCT ID_KONTAKT FROM STICHWORT WHERE (UPPER(TEXT) LIKE UPPER(_win1252 '%%')) OR UPPER(K.THEMA) LIKE UPPER(_win1252 '%%') OR UPPER(K.BESCHREIBUNG) LIKE UPPER(_win1252 '%%')) AND K.ID_PROGRM=4 ORDER BY (SELECT COUNT(ID) FROM WERTUNG Group by ID_kontakt)


    Hat jemand eine Idee wie ich den text anpassen kann? ?(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Jojo0405“ ()

    Servus,

    zum ersten wäre es schön wenn du Code Tags benutzen würdest un dein Statement mal formatierst.

    Zum Zweiten warum machst du ein

    SQL-Abfrage

    1. Group by​
    in deiner

    SQL-Abfrage

    1. ​Order by
    ?
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Servus auch!

    Hab deinen Code mal formatiert. Was mir auffällt(bin zwar kein SQL-er, aber ich glaube dass das dein Problem ist), ist folgendes:
    In deiner Abfrage machst du ja ein WHERE K.ID IN (...) AND K.ID_PROGRAMM=4 In deinem ersten WHERE Teil fehlt dir ne Bedingung, was k.ID sein soll, unten sagst du ja K.ID_PROGRAMM=4, aber oben eben nur WHER K.ID und nix weiter.

    Hoff es war ned zu kompliziert ;D

    Lg Radinator
    Bilder
    • sql_fhlr.jpg

      164,59 kB, 1.258×853, 193 mal angesehen
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Radinator schrieb:

    bin zwar kein SQL-er, aber ich glaube dass das dein Problem ist

    Nach kurzer Recherche ist klar, dass dieses WHERE im Verbund mit IN mehrere Werte für K.ID zulässt.
    w3schools.com/sql/sql_in.asp

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EaranMaleasi“ ()

    Das wird so nicht gehen. Den Fehler hast du deshalb, weil der ORDER BY clause mehrere Zeilen zurückgibt.
    Denke mal nach: du selektierst Daten von der Tabelle Kontakte und möchtest die sortieren nach einem Feld in einer anderen Tabelle. Geht natürlich nicht.

    Also du musst count(x) in deine erste SELECT-Abfrage einbinden.
    Wie baue ich das denn am geeignetesten dort mit hinein?

    SQL-Abfrage

    1. SELECT K.ID, K.IERLEDIGT, K.THEMA, K.CRDATE, count(W.ID) FROM KONTAKTE AS K, WERTUNG AS W WHERE K.ID IN (SELECT DISTINCT ID_KONTAKT FROM STICHWORT WHERE (UPPER(TEXT) LIKE UPPER(_win1252 '%%')) OR UPPER(K.THEMA) LIKE UPPER(_win1252 '%%') OR UPPER(K.BESCHREIBUNG) LIKE UPPER(_win1252 '%%')) AND K.ID_PROGRM=4 ORDER BY (SELECT COUNT(W.ID) FROM WERTUNG Group by W.ID_kontakt)


    Wenn ich es so mache klappt es nicht.
    Die Fehlermeldung lautet:
    Cannot use an aggregate function in a GROUP BY clause.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Jojo0405“ ()

    Habs nach mehrerer Überarbeitung des SQL Statements endlich geschafft:

    SQL-Abfrage

    1. SELECT K.ID, K.IERLEDIGT, K.THEMA, K.CRDATE, count(W.ID) as ANZAHL
    2. FROM KONTAKTE AS K
    3. LEFT JOIN WERTUNG AS W ON K.ID=W.ID_KONTAKT
    4. LEFT JOIN STICHWORT AS S ON K.ID=S.ID_KONTAKT
    5. WHERE (UPPER(S.TEXT) LIKE UPPER(_win1252 '%%')) OR UPPER(K.THEMA) LIKE UPPER(_win1252 '%%') OR UPPER(K.BESCHREIBUNG) LIKE UPPER(_win1252 '%%')
    6. AND K.ID_PROGRM=4
    7. GROUP BY K.ID, K.IERLEDIGT, K.THEMA, K.CRDATE
    8. ORDER BY ANZAHL DESC, K.ID DESC