![]() |
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:
Ziel ist es, eine Aufstellung zu ein paar Tabellen zu bekommen, in der die Anzahl der Datensätze aufgelistet sind.
Select
A.Nummer, A.Name, (Select Count(*) from A.Name) as Anzahl from Tabelle A Die Frage ist, ist es überhaupt in einer Abfrage möglich? Oder habe ich einen Denkfehler? Gruß Eppos |
AW: Select auf Ergebnis aus gleichem Select
Warum nicht auf die einfache Tour?
SQL-Code:
Dann steht zwar in jeder Zeile "Anzahl" mit drin, aber das war denke ich so auch gewünscht.
Select
A.Nummer, A.Name, Count(*) as Anzahl from Tabelle A |
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 |
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 |
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. |
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.
|
AW: Select auf Ergebnis aus gleichem Select
Jetzt hab ich es auch verstanden. Leider habe ich aber keine Lösung für das Problem.
|
AW: Select auf Ergebnis aus gleichem Select
@DeddyH
Genau so ist es |
AW: Select auf Ergebnis aus gleichem Select
Zitat:
Falls es nicht funktioniert, würde ich das über eine Stored Procedure lösen. |
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; |
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.)
|
AW: Select auf Ergebnis aus gleichem Select
In A.Name steht keine Tabelle, sondern ein Tabellenname auf den wiederrum der Count laufen soll.
|
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!
|
AW: Select auf Ergebnis aus gleichem Select
Ich bin zwar schon weiter... aber ich jetzt das Problem bei der procedure
Delphi-Quellcode:
Bekomme aber immer ein Fehler bei INTO...
CREATE PROCEDURE P_TABLEDATA_COUNT ( ATABELLE VARCHAR(30) ) RETURNS ( AANZAHL INTEGER )
AS begin Select Count(*) as aanzahl from ATABELLE INTO :AANZAHL; Suspend; End Hat jemand eine Idee |
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. |
AW: Select auf Ergebnis aus gleichem Select
... so habe ich es gelöst.
Code:
und dann so Abfragen
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 SELECT * FROM PSYS_TAB_RECORDS_COUNT Gruß Borwin |
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