![]() |
Datenbank: Interbase • Version: 7.1 • Zugriff über: IBX
kombination von Select count(*), ID,... und Abfrage
Hallo,
über eine StoredProc suche ich Daten in meiner DB. Hier habe ich bis jetzt immer 2 Abfragen gestartet, 1 für das Count und die anderen um die Daten zu holen. Nun meine Frage, ist es möglich, dies nicht in einer Select zu kombinieren? Ich habe das hier ja schon gesehen aber ich bin wahrschein,lich zu b... dazu. Ich bekomme immer nur eine nette Exception Zitat:
SQL-Code:
aufbaue sollte das doch gehen oder liege ich da so falsch? :gruebel:
Create Procedure ....
... Returns ( ID Integer, Name VARCHAR (30), Count Integer) AS Begin Select Count(ID) AS Count, Name AS Name, ... From DB WHERE ID = :iID Into :Count, :ID, :Name suspend; end |
Re: kombination von Select count(*), ID,... und Abfrage
Das geht so nicht!
Count ist eine Group-Funktion, und somit kannst du bei einer Gruppierung nicht auf andere Felder zugreifen... Zu Erklärung: Nehmen wir an, es gibt 3 Sätze in der Tabelle, die die gesuchte ID haben:
Code:
Du zählst jetzt die Sätze, das liefert einen Satz zurück, ID wäre noch möglich, wenn du ein group by id an deine Abfrage hängen würdest, aber welcher Namen soll denn genommen werden?? Wenn du allerdings überall den gleichen Namen drinstehen hast, dann kannst du an dein group by noch ein ,name anhängen...
ID Name
1 A 1 B 1 C Ich vermute aber, dass ID in deiner Tabelle eine Referenz auf einer andere Tabelle ist, wo ID der Primärschlüssel ist. Dann wäre es redundant, den Namen in der Tabelle zu speichern, wo der Verweis steht. Der INTO-Teil kommt übrigens vor das FROM... MfG Stevie |
Re: kombination von Select count(*), ID,... und Abfrage
Hmm...sollte eigentlich funktionieren. Hab selbst in manchen Procedures eine Statement welches so ähnlich aufgebaut ist. Scheint aber klar zu sein warums nicht funkt:
Du baust dein Select so auf:
SQL-Code:
und versucht es dann so zuzuweisen:
Select Count(ID) AS Count, Name AS Name, ...
SQL-Code:
Du versuchst also das Feld "NAME" der Variable "ID" zuzuweisen. Kann ja nicht gehen, oder?
Into :Count, :ID, :Name
LG EDIT: Wusste gar nicht das man reservierte Wörter als Variablenbezeichnung verwenden darf (COUNT) |
Re: kombination von Select count(*), ID,... und Abfrage
Zitat:
|
Re: kombination von Select count(*), ID,... und Abfrage
Zitat:
|
Re: kombination von Select count(*), ID,... und Abfrage
Moin,
@Stevie: Wenn ich dich richtig verstanden habe geht das nicht aber ich das schon gesehen. Zitat:
@Lord_Stifterl: Daran liegt es nicht, ich habe das nur falsch geschrieben. Kannst Du mir vielleicht zeigen wie das bei dir aussieht. So hier mal der gesamte Code, der Fehler wegen. :-D
SQL-Code:
Wenn ich das Count und Group By herausnehme läuft der Code.
CREATE PROCEDURE PROC_SEARCH_STAMM (
ITAG INTEGER, IS_NAME VARCHAR (30) CHARACTER SET ISO8859_1, IS_FIRMA VARCHAR (30) CHARACTER SET ISO8859_1, ISDXNAME VARCHAR (30) CHARACTER SET ISO8859_1, ISDXFIRMA VARCHAR (30) CHARACTER SET ISO8859_1) RETURNS ( OCOUNT INTEGER, OID INTEGER, OFULL_NAME VARCHAR (60) CHARACTER SET ISO8859_1, OFIRMA VARCHAR (100) CHARACTER SET ISO8859_1, OSTRASSE VARCHAR (100) CHARACTER SET ISO8859_1, OFULL_ORT VARCHAR (100) CHARACTER SET ISO8859_1) AS begin if (iTag = 1) then Begin /*Select Count(*) From db_stammdaten WHERE (Name Like :iS_Name) or (Firma Like :iS_Firma) Into :oCount;*/ for select Count(St.Vorname) AS oCount, St.ID AS oID, St.Vorname ||' '||St.Name AS oFull_Name, St.Firma AS oFirma, St.Strasse AS oStrasse, P.Plz||' '||P.Ort AS oFull_Ort From db_stammdaten St Left Join db_plzort P ON (St.PlzOrtID = P.ID) Where (St.Name Like :iS_Name) or (St.Firma Like :iS_Firma) Group By Name Into :oCount, :oID, :oFull_Name, :oFirma, :oStrasse, :oFull_Ort do suspend; end end Danke |
Re: kombination von Select count(*), ID,... und Abfrage
Bei mir sieht das Statement in der StoredProcedure so aus:
SQL-Code:
SELECT COUNT(ANMELDUNGSID), SUM(BETRAG)
FROM TANMELDUNGEN WHERE ZAHLUNGSARTID = :iZahlungsartID AND BEZAHLT = 'T' AND STORNO = 'F' AND ZAHLUNGSDATUM = :DATUM AND ANLAGEVON = :USERID INTO :iAnzahl, :nSumme; |
Re: kombination von Select count(*), ID,... und Abfrage
Zitat:
|
Re: kombination von Select count(*), ID,... und Abfrage
Ich bin mir jetzt nicht 100%ig sicher aber ich glaub da gibts eventuell troubles mit den ALIASES und den VARIABLEN.
SQL-Code:
Deine RETURN-Variablen haben den gleichen Namen wie deine Aliases. Vielleicht liegt hier irgendwo das Prob.for select Count(St.Vorname) AS oCount, St.ID AS oID, St.Vorname ||' '||St.Name AS oFull_Name, St.Firma AS oFirma, St.Strasse AS oStrasse, P.Plz||' '||P.Ort AS oFull_Ort From db_stammdaten St Left Join db_plzort P ON (St.PlzOrtID = P.ID) Where (St.Name Like :iS_Name) or (St.Firma Like :iS_Firma) Group By Name Into :oCount, :oID, :oFull_Name, :oFirma, :oStrasse, :oFull_Ort LG |
Re: kombination von Select count(*), ID,... und Abfrage
So, da dass ja so nicht zu gehen scheint. Hier mal der Grund für die Versuche.
Ich habe 2 Tabelle (aus den die Daten kommen). 1 mit Stammdaten und die 2te mit Partnern. Zu jeder Stammdate kann es ja nun beliebig viele Partner geben, also wollte ich nun, wenn ich in den Stammdate suche gleich noch mit rausbekommen wieviele Partner hierzu vorhanden sind. Die Tabelle sind über die ID der Stammdate-DB miteinander verbunden. Ich habe mir das so vorgestellt, dass man suchen kann (logisch) und in dem Suchergebnis der Stammdate soll dann gleich noch die Anzahl der Partner angezeigt werden. Muster: ID Name ... ... Anzahl Partner 1 Meier ... ... 1 2 Müller ... ... 2 usw. Wenn das irgendwie gehen würde, wäre das echt super. Wenn ich nun eine Abfrage starte, in der ich alle Stammdaten und die SID's (ID der Stdaten) der Partner hole, müßte man doch über Group by St.ID (Stammdaten) die Daten zusammenfassen können, oder? Versteh ich das Group by falsch. :wall: :wall: :wall: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 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-2025 by Thomas Breitkreuz