AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle

Ein Thema von Salomon · begonnen am 7. Aug 2008 · letzter Beitrag vom 10. Aug 2008
Antwort Antwort
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#1

SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle

  Alt 7. Aug 2008, 12:28
Datenbank: MS SQL • Zugriff über: ADO
Hallo,
ich bräuchte Hilfe bei einer SQL Abfrage. Und zwar habe ich die Tabelle Issues und Attachments. Nun müsste ich in der Ergebnismenge ausgeben ob zu der Issue eine Attachment vorhanden ist. Das folgende SQl funktioniert so leider nicht.

SQL-Code:
select IssueID, i.Name, Attachment = Case When (Select COUNT(*) from TB_IssueAttachetFiles Where a.FK_IssueID = i.IssueID) > 0 then 'Yes'
from tb_issues i;
Das Ergebnis soll später so aussehen:

IssueID Attachment
1 Yes
2
3
4 Yes

Gruß
Marcus
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle

  Alt 7. Aug 2008, 12:33
SQL-Code:
select
    IssueID, i.Name,
    Case When (Select COUNT(*) from TB_IssueAttachetFiles Where a.FK_IssueID = i.IssueID) > 0 then 'Yeselse 'end as Attachment
from
    tb_issues i;
Markus Kinzler
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

Re: SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle

  Alt 7. Aug 2008, 12:35
Hallo,

ist die Syntax so korrekt?
Wie lautet die Fehlermeldung?

SQL-Code:
select IssueID, i.Name, Attachment = Case When (Select COUNT(*) from TB_IssueAttachetFiles Where a.FK_IssueID = i.IssueID) > 0 then 'Yes
from tb_issues i;
Hätte eher sowas erwartet:

SQL-Code:
select i.IssueID,
            i.Name,
            Case When (Select COUNT(*) from TB_IssueAttachetFiles a Where a.FK_IssueID = i.IssueID) > 0 then 'Yes
            else 'No'
            end as Attachment
from tb_issues i;
Stephan

PS: und schon wieder ist einer schneller
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle

  Alt 7. Aug 2008, 12:41
SQL-Code:
SELECT IssueID, Name,
       CASE WHEN (SELECT COUNT(*)
                  FROM TB_IssueAttachetFiles
                  WHERE FK_IssueID = i.IssueID) > 0
          THEN 'Yes
          ELSE NULL
       END Attachment
FROM tb_issues i
da du die genaue Anzahl ja nicht benötigst...
SQL-Code:
SELECT IssueID, Name,
       CASE WHEN EXISTS (SELECT *
                         FROM TB_IssueAttachetFiles
                         WHERE FK_IssueID = i.IssueID)
          THEN 'Yes
          ELSE NULL
       END Attachment
FROM tb_issues i

oder auch...
SQL-Code:
SELECT i.IssueID, i.Name, COALESCE('Yes (' + a.anzahl + ')', '') AS Attachment
FROM tb_issues i
LEFT JOIN (SELECT FK_IssueID, COUNT(*) AS anzahl
           FROM TB_IssueAttachetFiles
           GROUP BY FK_IssueID) a
  ON i.IssueID = a.FK_IssueID
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle

  Alt 7. Aug 2008, 12:49
...
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#6

Re: SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle

  Alt 7. Aug 2008, 14:24
Hey Danke für die ganzen Anworten!

Die Syntax meines SQLs ist nicht korrekt. Hatte ich ganz vergessen zu schreiben, sorry.

mKinzler nutzt ja quasi mein Query mit der richtigen Syntax Dann funktionierts auch.

Da ich die Anzahl wirklich nicht brauche müsste omata's Version ohne das Count, schneller sein, oder?
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle

  Alt 7. Aug 2008, 14:37
Zitat:
mKinzler nutzt ja quasi mein Query mit der richtigen Syntax Smile Dann funktionierts auch.
Das war auch die Absicht
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Salomon
Salomon

Registriert seit: 9. Jun 2002
453 Beiträge
 
#8

Re: SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle

  Alt 7. Aug 2008, 14:45
Ich weiß Da war ich ja nah dran^^

Ich nutze jetzt aber omata Version mit dem EXISTS Statement. Das läuft soweit sehr gut.
01001000 01100001 01101100 01101100 01101111
01010111 01100101 01101100 01110100 00100001

http://www.it-adviser.net
  Mit Zitat antworten Zitat
Scooty78

Registriert seit: 3. Jul 2008
Ort: Düren
41 Beiträge
 
RAD-Studio 2009 Ent
 
#9

Re: SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle

  Alt 10. Aug 2008, 10:18
Hat zwar nix mit der eigentlichen Frage zu tun, aber ich versuche grundsätzlich SQLs wir select * from customers oder select count(*) from customers zu vermeiden.
Bei grossen Datenbanken könnte die Performance darunter leiden. Bei einem count bietet sich ein select count(1) from customers an.

Nur so nebenbei!
  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 08:26 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