AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MSSQL Spaltennamen bei Mehrfachabfrage?
Thema durchsuchen
Ansicht
Themen-Optionen

MSSQL Spaltennamen bei Mehrfachabfrage?

Ein Thema von okoeller · begonnen am 11. Dez 2007 · letzter Beitrag vom 12. Dez 2007
Antwort Antwort
okoeller

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#1

MSSQL Spaltennamen bei Mehrfachabfrage?

  Alt 11. Dez 2007, 23:27
Datenbank: MSSQL • Zugriff über: MSSQL
Hi,

folgender SQL code liefert für die ersten beiden Spalten korrekte Namen wie famstand und AnzVerträge.
Leider nicht für die Spalten 3-5. In Spalte 3 bekomme ich keinen Namen angezeigt, in Spalte 4 steht eine "1" und in Spalte 5 "2".
Warum werden AnzKinder, AnzKampagnen und EKjahr nicht als Spaltennamen angezeigt?????


SQL-Code:
SELECT A.familienstand As famstand, COUNT(B.kunden_id) AS AnzVerträge,
(SELECT COUNT(C.kunden_id) AS AnzKinder FROM kind C WHERE C.kunden_id= 7 ),
(SELECT COUNT(D.kunden_id) AS AnzKampagnen FROM rel_kuka D WHERE D.kunden_id=7),
(SELECT COUNT(E.kunden_id) AS EKjahr FROM einkommen E WHERE E.kunden_id=7
   AND E.von=(SELECT MAX(von)FROM einkommen E WHERE E.kunden_id=7))
FROM familienstand A
JOIN vertrag B ON B.kunden_id = A.kunden_id
WHERE A.kunden_id = 7
AND A.von = (SELECT MAX(von)
             FROM familienstand
             WHERE kunden_id = 7)
GROUP BY A.familienstand
Vielen Dank
okoeller
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: MSSQL Spaltennamen bei Mehrfachabfrage?

  Alt 11. Dez 2007, 23:29
SQL-Code:
SELECT A.familienstand As famstand, COUNT(B.kunden_id) AS AnzVerträge,
(SELECT COUNT(C.kunden_id) FROM kind C WHERE C.kunden_id= 7 ) AS AnzKinder, ...
Markus Kinzler
  Mit Zitat antworten Zitat
omata

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

Re: MSSQL Spaltennamen bei Mehrfachabfrage?

  Alt 12. Dez 2007, 00:16
und noch ein Versuch...

SQL-Code:
SELECT a.familienstand AS famstand,
       COUNT(b.kunden_id) AS AnzVerträge,
       (SELECT COUNT(kunden_id)
        FROM kind
        WHERE kunden_id = 7) AS AnzKinder,
       (SELECT COUNT(kunden_id)
        FROM rel_kuka
        WHERE kunden_id = 7) AS AnzKampagnen,
       (SELECT COUNT(kunden_id)
        FROM einkommen
        WHERE kunden_id = 7
          AND von = (SELECT MAX(von)
                     FROM einkommen
                     WHERE kunden_id = 7)) AS EKjahr
FROM familienstand a
INNER JOIN vertrag b
  ON b.kunden_id = a.kunden_id
WHERE a.kunden_id = 7
  AND a.von = (SELECT MAX(von)
               FROM familienstand
               WHERE kunden_id = 7)
GROUP BY a.familienstand
und noch ein anderer Vorschlag, der gleich für alle Kunden gilt...
SQL-Code:
SELECT a.kunden_id,
       a.familienstand AS famstand,
       COUNT(*) AS AnzVerträge,
       kinder.anzahl AS AnzKinder,
       kampagnen.anzahl AS AnzKampagnen,
       ekjahr.anzahl AS EKjahr
FROM familienstand a
INNER JOIN vertrag b
  ON b.kunden_id = a.kunden_id
LEFT JOIN (SELECT kunden_id, COUNT(*) anzahl
           FROM kind
           GROUP BY kunden_id) kinder
  ON a.kunden_id = kinder.kunden_id
LEFT JOIN (SELECT kunden_id, COUNT(*) anzahl
           FROM rel_kuka
           GROUP BY kunden_id) kampagnen
  ON a.kunden_id = kampagnen.kunden_id
LEFT JOIN (SELECT kunden_id, COUNT(*) anzahl
           FROM einkommen e
           WHERE von = (SELECT MAX(von)
                        FROM einkommen
                        WHERE kunden_id = e.kunden_id)
           GROUP BY kunden_id) ekjahr
  ON a.kunden_id = ekjahr.kunden_id
WHERE a.von = (SELECT MAX(von)
               FROM familienstand
               WHERE kunden_id = a.kunden_id)
GROUP BY a.kunden_id, a.familienstand,
         kinder.anzahl, kampagnen.anzahl, ekjahr.anzahl
Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

Re: MSSQL Spaltennamen bei Mehrfachabfrage?

  Alt 12. Dez 2007, 08:18
Hab auch noch einen:
SQL-Code:
SELECT A.familienstand As famstand,
       COUNT(B.kunden_id) AS AnzVerträge,
       COUNT(C.kunden_id) AS AnzKinder,
       COUNT(D.kunden_id) AS AnzKampagnen,
       COUNT(E.kunden_id) AS EKjahr
FROM familienstand A
JOIN vertrag B ON B.kunden_id = A.kunden_id
JOIN kind C ON C.kunden_id = A.kunden_id
JOIN rel_kuka D ON D.kunden_id = A.kunden_id
JOIN einkommen E ON E.kunden_id = A.kunden_id
WHERE A.kunden_id = 7
AND A.von = (SELECT MAX(F.von)
             FROM familienstand F
             WHERE F.kunden_id = A.kunden_id)
AND E.von = (SELECT MAX(G.von)
             FROM einkommen G
             WHERE G.kunden_id = A.kunden_id)
GROUP BY A.familienstand
[edit] Quatsch, das wird nicht funktionieren, es wird wohl immer die selbe Anzahl in allen Feldern stehen. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
okoeller

Registriert seit: 21. Nov 2006
66 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: MSSQL Spaltennamen bei Mehrfachabfrage?

  Alt 12. Dez 2007, 10:23
Hallo und vielen Dank für die vielen Antworten.

Die Beispiele von mkinzler und omata funktionieren wunderbar.
Wenn ich jetzt noch folgende Änderung einführe bekomme ich auch noch das einkommen des Kunden.

SQL-Code:
..
(SELECT E.jahreseinkommen FROM einkommen E WHERE E.kunden_id=7
   AND E.von=(SELECT MAX(von)FROM einkommen E WHERE E.kunden_id=7))AS EKjahr
..
Somit erhalte ich für einen bestimmten Kunden den Familienstand, die Anzahl seiner Verträge, die Anzahl seiner Kinder, die Anzahl der Kampagnen in denen er eingetragen ist und sein letztes Jahreseinkommen.

SQL-Code:
SELECT A.familienstand As famstand, COUNT(B.kunden_id) AS AnzVerträge,
(SELECT COUNT(C.kunden_id) FROM kind C WHERE C.kunden_id= 7 )AS AnzKinder,
(SELECT COUNT(D.kunden_id) FROM rel_kuka D WHERE D.kunden_id=7)AS AnzKampagnen,
(SELECT E.jahreseinkommen FROM einkommen E WHERE E.kunden_id=7
   AND E.von=(SELECT MAX(von)FROM einkommen E WHERE E.kunden_id=7))AS EKjahr
FROM familienstand A
JOIN vertrag B ON B.kunden_id = A.kunden_id
WHERE A.kunden_id = 7
AND A.von = (SELECT MAX(von)
             FROM familienstand
             WHERE kunden_id = 7)
GROUP BY A.familienstand
Die Variante von omata für alle Kunden werde ich mal aufheben, vielleicht brauch ich sie noch an anderer Stelle.

okoeller
  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 23:38 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