AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi kombination von Select count(*), ID,... und Abfrage

kombination von Select count(*), ID,... und Abfrage

Ein Thema von Albi · begonnen am 17. Mär 2005 · letzter Beitrag vom 17. Mär 2005
Antwort Antwort
Seite 1 von 2  1 2   
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#1

kombination von Select count(*), ID,... und Abfrage

  Alt 17. Mär 2005, 07:45
Datenbank: Interbase • Version: 7.1 • Zugriff über: IBX
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:
fmCompile.quCompile:
Invalid token.Dynamic SQL Error.
SQL error code = -104.
invalid column reference.
Wenn ich die Procedure so

SQL-Code:
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
aufbaue sollte das doch gehen oder liege ich da so falsch?
Gruß

Albi
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.885 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

Re: kombination von Select count(*), ID,... und Abfrage

  Alt 17. Mär 2005, 08:03
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:
ID  Name
1    A
1    B
1    C
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...

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
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Lord_Stifterl

Registriert seit: 13. Dez 2002
Ort: Wien
175 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: kombination von Select count(*), ID,... und Abfrage

  Alt 17. Mär 2005, 08:05
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:

Select Count(ID) AS Count, Name AS Name, ... und versucht es dann so zuzuweisen:

  Into :Count, :ID, :Name Du versuchst also das Feld "NAME" der Variable "ID" zuzuweisen. Kann ja nicht gehen, oder?

LG

EDIT:

Wusste gar nicht das man reservierte Wörter als Variablenbezeichnung verwenden darf (COUNT)
Alex
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.885 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

Re: kombination von Select count(*), ID,... und Abfrage

  Alt 17. Mär 2005, 08:12
Zitat von Lord_Stifterl:
Wusste gar nicht das man reservierte Wörter als Variablenbezeichnung verwenden darf (COUNT)
Darf man auch nicht, noch ein Fehler...
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Lord_Stifterl

Registriert seit: 13. Dez 2002
Ort: Wien
175 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: kombination von Select count(*), ID,... und Abfrage

  Alt 17. Mär 2005, 08:16
Zitat:
Darf man auch nicht, noch ein Fehler...
Wusste ichs doch
Alex
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#6

Re: kombination von Select count(*), ID,... und Abfrage

  Alt 17. Mär 2005, 08:30
Moin,

@Stevie: Wenn ich dich richtig verstanden habe geht das nicht aber ich das schon gesehen.

Zitat von Stevie:
Der INTO-Teil kommt übrigens vor das FROM...
Bist Du dir da ganz sicher?

@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.

SQL-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
Wenn ich das Count und Group By herausnehme läuft der Code.

Danke
Gruß

Albi
  Mit Zitat antworten Zitat
Lord_Stifterl

Registriert seit: 13. Dez 2002
Ort: Wien
175 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: kombination von Select count(*), ID,... und Abfrage

  Alt 17. Mär 2005, 08:36
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;
Alex
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
3.885 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

Re: kombination von Select count(*), ID,... und Abfrage

  Alt 17. Mär 2005, 08:41
Zitat von Albi:
Moin,

@Stevie: Wenn ich dich richtig verstanden habe geht das nicht aber ich das schon gesehen.

Zitat von Stevie:
Der INTO-Teil kommt übrigens vor das FROM...
Bist Du dir da ganz sicher?
Ach, Mist, bei Oracle ist das so!
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Lord_Stifterl

Registriert seit: 13. Dez 2002
Ort: Wien
175 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: kombination von Select count(*), ID,... und Abfrage

  Alt 17. Mär 2005, 08:50
Ich bin mir jetzt nicht 100%ig sicher aber ich glaub da gibts eventuell troubles mit den ALIASES und den VARIABLEN.

SQL-Code:
   
        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
Deine RETURN-Variablen haben den gleichen Namen wie deine Aliases. Vielleicht liegt hier irgendwo das Prob.

LG
Alex
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#10

Re: kombination von Select count(*), ID,... und Abfrage

  Alt 17. Mär 2005, 08:56
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.
Gruß

Albi
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 19:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf