Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Verschachtelte SQL-Anweisung (https://www.delphipraxis.net/14654-verschachtelte-sql-anweisung.html)

PeterRettig 13. Jan 2004 13:38


Verschachtelte SQL-Anweisung
 
Hallo,

angenommen ich habe eine Tebelle mit folgenden Spalten:

Nummer (Typ integer)
Anzahl (Typ integer)

In der Spalte Nummer stehen beliebige Zahlen.
1, 3, 2, 3, 5, 6, 6, 22 etc.

Die gesuchte SQL-Anweisung soll jetzt folgendes erledigen:

Trage in die Spalte Anzahl die Anzahl der gleichlautenden
Nummern aus Spalte Nummer ein.
Also bei oben genannten Werten sähe die Tabelle danach richtigerweise
folgendermaßen aus:

Nummer Anzahl
1 1
3 2
2 1
3 2
5 1
6 2
6 2
22 1

Das Ganze mit einem Durchlauf durch die Tabelle und jede einzelne
ZEILE mit count(NUMMER) AS ZAEHLER where NUMMER = xxx errechnen und per
UPDATE xxx SET ANZAHL = :ZAEHLER eintragen wollte ich absichtlich vermeiden.

Ciao Peter

Robert_G 13. Jan 2004 13:57

Re: Verschachtelte SQL-Anweisung
 
Ich glaube, die Anzahl fest in die Tabelle zu schreiben macht nicht viel Sinn.
Sie würde sich eh ständig ändern.

Wenn du die Anzahl der Nummern wissen/darstellen willst machst du es so:
SQL-Code:
SELECT Nummer,Count(Nummer) As Anzahl
FROM  Tabelle
Group By Nummer

Domo Sokrat 13. Jan 2004 14:05

Re: Verschachtelte SQL-Anweisung
 
Hi Peter!

Ich würd's ähnlich machen:

SQL-Code:
CREATE TABLE tab (
   nummer integer);

CREATE INDEX ix_tab ON tab (nummer);

CREATE VIEW v_nummer AS
   SELECT nummer, count(nummer) as anzahl
   FROM tab
   GROUP BY nummer;

Leuselator 13. Jan 2004 14:37

Re: Verschachtelte SQL-Anweisung
 
Wenn Deine DB Subselects erlaubt, könnte folgendes Statement das gewünschte bewerkstelligen:
SQL-Code:
    Update TabellenName
       set TN.Anzahl = TC.Zahl
      from TabellenName TN
inner join (  select Nummer
                     ,count(Nummer) as Zahl
                from TabellenName
            group by Nummer) TC
        on TC.Nummer = TN.Nummer
Gruß

Hansa 13. Jan 2004 18:38

Re: Verschachtelte SQL-Anweisung
 
Zitat:

Zitat von GeorgeWNewbie
...die Anzahl der Nummern wissen/darstellen willst machst du es so:
SQL-Code:
SELECT Nummer,Count(Nummer) As Anzahl
FROM Tabelle
Group By Nummer

Bezieht sich teilweise hierauf:

http://www.delphipraxis.net/internal...455&highlight=

Zu dem Code habe ich eine Frage : Wieso geht das bei mir so nicht ? 8)

Robert_G 13. Jan 2004 19:43

Re: Verschachtelte SQL-Anweisung
 
@Hansa
Da muss ich dir leider sagen "keine Ahnung", das muss einfach funktionieren.

Count ist eine Agregatfunktion und gibtdie Anzahl aller Einträge in denen eine Nummer steht aus (pro Gruppierung).
  • 1
    1
    1 -> Ende 1.Gruppe: 3 Einträge
    2
    2 -> Ende 2. Gruppe: 2 Einträge
    3
    3
    3
    3 -> Ende 2. Gruppe: 4 Einträge

Abfrage ergibt:
  • 1 3
    2 2
    3 4

edit: Sorry, kurz vor Feierabend habe ich deinen Post nicht richtig gelesen.
Versuch's mit "Count(*)" und der gleichen Where-clause aus dem Detail-set


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz