Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Select auf Ergebnis aus gleichem Select (https://www.delphipraxis.net/179170-select-auf-ergebnis-aus-gleichem-select.html)

Eppos 18. Feb 2014 15:07

Datenbank: Firebird • Version: 2.5 • Zugriff über: FibPlus

Select auf Ergebnis aus gleichem Select
 
Hallo zusammen,

ich wusste nicht wie ich mich ausdrücken soll.

Dieser SQL sollte auf das Ergebnis der Tabelle A, einen Count auf das A.Feld machen, aber es sollte eine Abfrage sein.

Delphi-Quellcode:
Select
A.Nummer,
A.Name,
(Select Count(*) from A.Name) as Anzahl
from Tabelle A
Ziel ist es, eine Aufstellung zu ein paar Tabellen zu bekommen, in der die Anzahl der Datensätze aufgelistet sind.

Die Frage ist, ist es überhaupt in einer Abfrage möglich?

Oder habe ich einen Denkfehler?

Gruß
Eppos

Medium 18. Feb 2014 15:09

AW: Select auf Ergebnis aus gleichem Select
 
Warum nicht auf die einfache Tour?
SQL-Code:
Select
  A.Nummer,
  A.Name,
  Count(*) as Anzahl
from Tabelle A
Dann steht zwar in jeder Zeile "Anzahl" mit drin, aber das war denke ich so auch gewünscht.

Eppos 18. Feb 2014 15:16

AW: Select auf Ergebnis aus gleichem Select
 
Ne so eben nicht.
Er muss den count auf eine andere Tabelle machen, und zwar auf die A.Name.

ID | Name | Anzahl
_________________________
1 | TAB1 | 47
33 | TAB2 | 22
12 | TAB3 | 123
8 | TAB4 | 456

TheFrog 18. Feb 2014 15:22

AW: Select auf Ergebnis aus gleichem Select
 
Sollte doch mit Group by zu erledigen sein, wenn ich das richtig sehe:

Select A.ID, A.Name, Count(*) from Tabelle A
Group by A.ID, A.Name

Eppos 18. Feb 2014 15:25

AW: Select auf Ergebnis aus gleichem Select
 
Nicht auf die Tabelle sondern auf das gleiche Feld wie im Select A.NAME
und der wiederum im Select-Count.

DeddyH 18. Feb 2014 15:25

AW: Select auf Ergebnis aus gleichem Select
 
Es soll ja kein Count von Tabelle A sein, sondern von der Tabelle, die in A.Name steht. Ob das so einfach geht, weiß ich mangels Erfahrung auch nicht, notfalls müsste man über die Systemtabellen gehen.

TheFrog 18. Feb 2014 15:30

AW: Select auf Ergebnis aus gleichem Select
 
Jetzt hab ich es auch verstanden. Leider habe ich aber keine Lösung für das Problem.

Eppos 18. Feb 2014 15:38

AW: Select auf Ergebnis aus gleichem Select
 
@DeddyH
Genau so ist es

Jasocul 18. Feb 2014 15:40

AW: Select auf Ergebnis aus gleichem Select
 
Zitat:

Zitat von Eppos (Beitrag 1248357)
Die Frage ist, ist es überhaupt in einer Abfrage möglich?

Hast du es denn schon ausprobiert?

Falls es nicht funktioniert, würde ich das über eine Stored Procedure lösen.

mkinzler 18. Feb 2014 15:41

AW: Select auf Ergebnis aus gleichem Select
 
In diesem Fall musst du dir die Abfrage manuell zusammenbauen, da ein Tabellennamen nicht parametrisierbar ist

SQL-Code:
execute block
returns ( Nummer int, Name varchar(..), anzahl int)
as
  Select
    A.Nummer,
    A.Name
  from Tabelle A
  into :Nummer, Name do
begin
  s = 'Select Count(*) from ' || Name ||';';
  execute statement s into :anzahl;
end;

Medium 18. Feb 2014 15:48

AW: Select auf Ergebnis aus gleichem Select
 
Vielleicht bin ich gerade etwas dümmlich, aber wieso sollte in A.Name eine Tabelle stehen, wenn A doch selbst eine ist? Seit wann können Tabellen Tabellen enthalten? Nach meinem Verständnis dürfte TheFrog mit dem GroupBy die Sache getroffen haben. (Mir fielen die unterschiedlichen Parameter des "FROM" nicht auf vorhin.)

baumina 18. Feb 2014 15:49

AW: Select auf Ergebnis aus gleichem Select
 
In A.Name steht keine Tabelle, sondern ein Tabellenname auf den wiederrum der Count laufen soll.

Medium 18. Feb 2014 16:21

AW: Select auf Ergebnis aus gleichem Select
 
Ahhhh, ich folgere daraus: Ja, ich bin heute etwas dümmlich :stupid: Danke, jetzt bin ich endlich wirklich im Bilde!

Eppos 18. Feb 2014 16:30

AW: Select auf Ergebnis aus gleichem Select
 
Ich bin zwar schon weiter... aber ich jetzt das Problem bei der procedure

Delphi-Quellcode:
CREATE PROCEDURE P_TABLEDATA_COUNT ( ATABELLE VARCHAR(30) ) RETURNS ( AANZAHL INTEGER )
AS
begin
  Select Count(*) as aanzahl from ATABELLE
  INTO :AANZAHL;
  Suspend;
End
Bekomme aber immer ein Fehler bei INTO...

Hat jemand eine Idee

mkinzler 18. Feb 2014 16:50

AW: Select auf Ergebnis aus gleichem Select
 
Tabelln und Feldbezeichner sind wie gesagt nicht parametrisierbar!
Das Staement muss, wie von mir gezeigt manuell zusammengebaut werden.

borwin 18. Feb 2014 17:19

AW: Select auf Ergebnis aus gleichem Select
 
... so habe ich es gelöst.

Code:
CREATE OR ALTER PROCEDURE PSYS_TAB_RECORDS_COUNT
RETURNS (
    TAB_NAME VARCHAR(31),
    REC_COUNT INTEGER)
AS
BEGIN

  FOR  SELECT TRIM(RDB$RELATION_NAME)
        FROM RDB$RELATIONS
        WHERE (RDB$VIEW_BLR IS NULL)
              AND (RDB$SYSTEM_FLAG = 0)
              AND SUBSTRING(RDB$RELATION_NAME FROM 1 FOR 3)
                    NOT IN ('SYS','IMP','LOG','TEM','DUA')
        ORDER BY RDB$RELATION_NAME
        INTO :TAB_NAME
  DO
  BEGIN
    EXECUTE STATEMENT 'SELECT COUNT(*) FROM ' || TAB_NAME
            INTO :REC_COUNT;

    SUSPEND;
  END
END
und dann so Abfragen
SELECT *
FROM PSYS_TAB_RECORDS_COUNT

Gruß
Borwin

Eppos 18. Feb 2014 19:48

AW: Select auf Ergebnis aus gleichem Select
 
Danke borwin
so etwas habe ich gesucht...


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 Uhr.

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