Laden...

[Erledigt] Abfrage "SELECT DISTINCT NAME1||' '||NAME2......

Erstellt von Starfight vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.182 Views
S
Starfight Themenstarter:in
62 Beiträge seit 2005
vor 8 Jahren
[Erledigt] Abfrage "SELECT DISTINCT NAME1||' '||NAME2......

verwendetes Datenbanksystem: SQLBase

Ich habe hier ein Programm, das mit SQLBase arbeitet. Dort wird eine Anfrage an das Datenbanksystem geschickt, die wie folgt aussieht:

Select distinct NAME1||'  '||NAME2||' KD-Nr.: '||KUNDEN.KDNR||'  '||KUNDEN.INFO from KUNDEN where KENNUNG=:1 and MDNR=:2 order by NAME1

Das Ergebnis ist etwas in der Art wie:


Kundenvorname Kundennachname KD-Nr.: 123456 Kundeninfo

So weit, so gut.
Nur, wie bekomme ich das nun mit SQL hin ?
die "||" Zeichen scheint SQL nicht zu kennen. In CSharp werden diese ja als ODER genutzt, aber ein ODER macht in der Abfrage keinen Sinn und auch das Ergebnis hat nichts mit einem ODER zu tun.
Es sieht mir eher so aus, als wenn man damit die Ausgabe gleich formatieren kann.
Es wird ja der VORNAME ausgegeben, dann ein Leerzeichen, dann der NAME, dann der Text "KD-Nr.:" gefolgt von der KUNDENNUMMER und der KUNDENINFO.
Klar, ein SELECT NAME1,NAME2,KUNDEN.KDNR, KUNDEN.INFO ..... würde mir die selben Daten liefern, aber nicht bereits formatiert.
Die formatierung wäre durchaus wichtig, da die Daten direkt aus der Datatable in eine ComboBox eingelesen und dort zur Auswahl bereitgestellt werden.

Jemand eine Idee, wie man das hinbekommen kann ?

T
314 Beiträge seit 2013
vor 8 Jahren

SQL? Welches?
Beim MSSQL Server kannst Du z.B. mit + arbeiten.

Allerdings ist das Abfragen der einzelnen Spalten + das Aufbereiten dieser Daten bevor du sie im Control anzeigst, die deutlich bessere Variante.

Grundsätzlich wäre eine Suche nach "concat string sql" bestimmt schneller gewesen.

1.029 Beiträge seit 2010
vor 8 Jahren

Hi,

ich verstehe das Anliegen ehrlich gesagt nicht ganz - du stellst hier irgendeine SQL-Syntax von SQLBase vor die offenkundig macht was du möchtest - definierst aber nicht selbst, was du eigentlich möchtest.

Nunja - dass diese Vorgehensweise nicht ganz so dolle war bzw. ist wird dir sicher bekannt sein - aber um eine entsprechende Formatierung hinzubekommen kannst du (wenn du die Daten erst einmal hast) z.B. String.Format verwenden:

String.Format("{0} {1} KD-Nr.: {2} {3}", entry.Name1, entry. Name2, entry.Nummer, entry. Info);

LG

2.207 Beiträge seit 2011
vor 8 Jahren

Hallo Starfight,

ich verstehe dein Problem auch nicht so ganz.

Zur Ergänzung:
Wenn du wissen willst, was "||" in der SQLBase-Syntax macht googelt man danach:

Google-Suche nach SQLBase syntax

und nimmt den ersten Treffer

SQLBase Language Reference

da wird der "||"-Operator als "String concatenation operator (||)" aufgeführt. Seite 47.

Wie man es in C# (besser) macht wurde ja bereits erwähnt.

Gruss

Coffeebean

T
2.224 Beiträge seit 2008
vor 8 Jahren

Ich würde die Daten unformatiert abfragen und später erst mit String.Format formatieren.
Meiner Meinung nach sollte man in einer SQL Anweisungen nur in besonderen Fällen die Ausgaben formatieren.
Wenn du z.B. die Daten später an einer anderen Stelle brauchst oder ohne eine Formatierung oder gar in einem anderen Format, musst du entweder eine neue Methode bauen oder deine vorhandene mit Fummeleien ausrüsten um das aktuelle Format zu ersetzen/enftfernen.

Wenn du das Drei-Schichten Model verwendest, wäre deine aktuelle Anpassung aus meiner Sicht sogar ein Verstoß da die Datenschicht dann schon einen Teil der Anwendungslogik z.B. auch der späteren UI Ausgaben übernimmt.
Entsprechend würde deine aktuelle SQL Anweisung also schon die Verantwortung der höheren Schichten übernehmen.

Nachtrag:
@Coffeebean
Er will seine Ausgabe in dem angegeben Format ausgeben.
Im Endeffekt will er wohl nur eine Spalte mit den entsprechenden Werten in einem Format haben.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

S
Starfight Themenstarter:in
62 Beiträge seit 2005
vor 8 Jahren

SQL? Welches?
Beim MSSQL Server kannst Du z.B. mit + arbeiten.

Sorry, vergessen. Ja MSSQL

Allerdings ist das Abfragen der einzelnen Spalten + das Aufbereiten dieser Daten bevor du sie im Control anzeigst, die deutlich bessere Variante.

Ähm, mit + ?
[Ausprobier]
Cool, klappt. Herzlichen Dank

@Taipi88
Ich zitiere mal

So weit, so gut. Nur, wie bekomme ich das nun mit SQL hin ?

Sorry, das ich SQL nicht genauer definiert hatte.

@T-Virus
Wenn ich die Daten nachträglich aufbereiten muß, bedeutet das wieder eine zusätzliche schleife. Wozu, wenn man es gleich in der Abfrage mit erledigen kann ?
Und wie mein Satz "Die formatierung wäre durchaus wichtig, da die Daten direkt aus der Datatable in eine ComboBox eingelesen und dort zur Auswahl bereitgestellt werden." schon andeutet, nur zur Auswahl benötigt und sonst nicht weiter verwendet.

Aber, wie es scheint, habe ich doch keine andere wahl, da die Option mit dem "+" nicht mit INTEGER Werten klar kommt und eine Typumwandlung in der SELECT wohl nicht möglich ist.

Danke an alle für die Hilfe.

1.040 Beiträge seit 2007
vor 8 Jahren

...und eine Typumwandlung in der SELECT wohl nicht möglich ist.

Doch, das geht prinzipiell:
CAST und CONVERT (Transact-SQL)

Bedeutet aber Aufwand in der Abfrage. Dann lieber eine zusätzliche Schleife im Programmcode. =)