AGB  ·  Datenschutz  ·  Impressum  







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

MSSQL Mehrfachabfrage

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

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

MSSQL Mehrfachabfrage

  Alt 11. Dez 2007, 17:04
Datenbank: MSSQL • Zugriff über: MSSQL
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

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#2

Re: MSSQL Mehrfachabfrage

  Alt 11. Dez 2007, 17:13
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.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
 
okoeller

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

Re: MSSQL Mehrfachabfrage

  Alt 11. Dez 2007, 17:20
Versteh ich das jetzt richtig: wenn ich union verwende bekomme ich Rückgabewerte nur in einem Format zurück, also string oder integer.

Da lässt sich nichts formatieren?

okoeller
 
Benutzerbild von DeddyH
DeddyH

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

Re: MSSQL Mehrfachabfrage

  Alt 11. Dez 2007, 17:52
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]
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
 
okoeller

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

Re: MSSQL Mehrfachabfrage

  Alt 11. Dez 2007, 18:49
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
 
Benutzerbild von DeddyH
DeddyH

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

Re: MSSQL Mehrfachabfrage

  Alt 11. Dez 2007, 18:51
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]
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
 
okoeller

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

Re: MSSQL Mehrfachabfrage

  Alt 11. Dez 2007, 21:11
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

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#8

Re: MSSQL Mehrfachabfrage

  Alt 12. Dez 2007, 09:45
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.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
 
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#9

Re: MSSQL Mehrfachabfrage

  Alt 12. Dez 2007, 10:52
Einmal reicht...
Hier gehts weiter.
 
Thema geschlossen


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