Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MSSQL Mehrfachabfrage (https://www.delphipraxis.net/104836-mssql-mehrfachabfrage.html)

okoeller 11. Dez 2007 16:04

Datenbank: MSSQL • Zugriff über: MSSQL

MSSQL Mehrfachabfrage
 
Hi,
die unten stehende SQL-Anweisungen liefert mir den Fehler:

< Syntaxfehler beim Konvertieren des varchar-Wertes 'Verheiratet' in eine Spalte vom Datentyp int.>(Toad for SQL Server)
Was mach ich hier falsch? Muss die Ergebnistabelle formatiert werden, wenn ja wie??

Schön wäre es auch, wenn ich die Ergebnisse in einer Zeile anstatt in einer Spalte zurückbekommen würde.
Wie lässt sich das erreichen?

SQL-Code:
SELECT familienstand As famstand
FROM familienstand
WHERE kunden_id = 1
AND von = (SELECT MAX(von)
               FROM familienstand
               WHERE kunden_id = 1)
union
select count(*) AS AnzVerträge
from vertrag
where kunden_id = 1
Vielen Dank
okoeller

generic 11. Dez 2007 16:13

Re: MSSQL Mehrfachabfrage
 
familienstand ist kein int datentyp!

dein union gibt doch nur int zurück.

entweder gibt dein union string zurück
oder dein familienstand wird int.

okoeller 11. Dez 2007 16:20

Re: MSSQL Mehrfachabfrage
 
Versteh ich das jetzt richtig: wenn ich
SQL-Code:
union
verwende bekomme ich Rückgabewerte nur in einem Format zurück, also string oder integer.

Da lässt sich nichts formatieren?

okoeller

DeddyH 11. Dez 2007 16:52

Re: MSSQL Mehrfachabfrage
 
Ich denke, Du meinst eher so etwas:
SQL-Code:
SELECT A.familienstand As famstand, COUNT(B.*) AS AnzVerträge
FROM familienstand A
JOIN vertrag B ON B.kunden_id = A.kunden_id
WHERE A.kunden_id = 1
AND A.von = (SELECT MAX(von)
             FROM familienstand
             WHERE kunden_id = 1)
[edit] Bei einer Union müssen die Teilergebnismengen datenkompatibel sein (z.B. davor und danach eine Integer und ein String) [/edit]

okoeller 11. Dez 2007 17:49

Re: MSSQL Mehrfachabfrage
 
Hallo DeddyH,

hab Deinen code mal getestet, bekomme aber folgende Fehlermeldung:
Zeile 1: Falsche Syntax in der Nähe von '*'.

Die Tabelle familienstand enthält die Felder:
famstand_id, familienstand, von;

die Tabelle vertrag enthält die Felder:
vertrag_id, kunden_id, vertragsart, datum, dokument

Ich möchte mit einer SQL Datei eine Abfrage über mehrere Tabellen hinweg durchführen.
Dabei soll für einen bestimmten Kunden,
der familienstand mit dem letzten Datum (Feld: von) aus der Tabelle familienstand und
die Anzahl der Verträge aus der Tabelle vertrag geholt werden.

okoeller

DeddyH 11. Dez 2007 17:51

Re: MSSQL Mehrfachabfrage
 
Dann versuch es mal mit COUNT(B.kunden_id)

[edit] Sry, habe ganz die Gruppierung vergessen.
SQL-Code:
SELECT A.familienstand As famstand, COUNT(B.kunden_id) AS AnzVerträge
FROM familienstand A
JOIN vertrag B ON B.kunden_id = A.kunden_id
WHERE A.kunden_id = 1
AND A.von = (SELECT MAX(von)
             FROM familienstand
             WHERE kunden_id = 1)
GROUP BY A.familienstand
[/edit]

[edit2] Wie sind die beiden Tabellen denn verknüpft? Ich kann auf den ersten Blick kein gemeinsames Schlüsselfeld entdecken. [/edit2]

okoeller 11. Dez 2007 20:11

Re: MSSQL Mehrfachabfrage
 
Hi DeddyH,

sorry in der Tabelle familienstand gibt es natürlich auch die kunden_id.

Mit der angefügten Gruppierung funktioniert es!
Auch die zweite Anforderung mit der Darstellung in einer Zeile ist damit erfüllt.

Ich versuch jetzt mal die anderen fehelnden 4 Abfragen einzubauen.

Mein Verständnis für SQL Abfragen wächst dank dieses Forums jeden Tag.


Erstmal vielen Dank
okoeller

generic 12. Dez 2007 08:45

Re: MSSQL Mehrfachabfrage
 
der Befehl Union fügt 2 gleiche Tabellen aneinander.

D.h. beide SQL-Statments müssen die gleiche Anzahl von Spalten haben und die Tabellen müssen jeweils in der gleichen Spalte den gleichen Datentyp haben.

Die Namen der Spalten spielen keine Rolle. Die erste Tabelle gibt die Namen im Ergebnis an.

Jelly 12. Dez 2007 09:52

Re: MSSQL Mehrfachabfrage
 
Einmal reicht...
Hier gehts weiter.


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