AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Verschachtelte SQL-Anweisung
Thema durchsuchen
Ansicht
Themen-Optionen

Verschachtelte SQL-Anweisung

Ein Thema von PeterRettig · begonnen am 13. Jan 2004 · letzter Beitrag vom 13. Jan 2004
Antwort Antwort
PeterRettig

Registriert seit: 4. Jun 2003
Ort: Schleiz
65 Beiträge
 
Delphi 4 Client/Server
 
#1

Verschachtelte SQL-Anweisung

  Alt 13. Jan 2004, 13:38
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
Warum kann man Atommüll nicht auf dem Mars lagern?
Mars bringt verbrauchte Energie sofort zurück!
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#2

Re: Verschachtelte SQL-Anweisung

  Alt 13. Jan 2004, 13:57
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
  Mit Zitat antworten Zitat
Benutzerbild von Domo Sokrat
Domo Sokrat

Registriert seit: 14. Mai 2003
Ort: Wehrheim / Ts.
235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Verschachtelte SQL-Anweisung

  Alt 13. Jan 2004, 14:05
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;
Michael Seeger
Vergesst nicht: Es wird überall nur mit Wasser gekocht
ZEOSLib - Admin-Team
ZeosLib-Forum
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#4

Re: Verschachtelte SQL-Anweisung

  Alt 13. Jan 2004, 14:37
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ß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: Verschachtelte SQL-Anweisung

  Alt 13. Jan 2004, 18:38
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)
Gruß
Hansa
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#6

Re: Verschachtelte SQL-Anweisung

  Alt 13. Jan 2004, 19:43
@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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 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