Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MSSQL Spaltennamen bei Mehrfachabfrage? (https://www.delphipraxis.net/104849-mssql-spaltennamen-bei-mehrfachabfrage.html)

okoeller 11. Dez 2007 22:27

Datenbank: MSSQL • Zugriff über: MSSQL

MSSQL Spaltennamen bei Mehrfachabfrage?
 
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

mkinzler 11. Dez 2007 22:29

Re: MSSQL Spaltennamen bei Mehrfachabfrage?
 
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, ...

omata 11. Dez 2007 23:16

Re: MSSQL Spaltennamen bei Mehrfachabfrage?
 
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

DeddyH 12. Dez 2007 07:18

Re: MSSQL Spaltennamen bei Mehrfachabfrage?
 
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]

okoeller 12. Dez 2007 09:23

Re: MSSQL Spaltennamen bei Mehrfachabfrage?
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 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