CoderboyPB Geschrieben 1. August 2008 Teilen Geschrieben 1. August 2008 Hallo Ich habe folgende Abfrage: SELECT (SELECT top(1) TaskName FROM Tasks ORDER BY TaskOrder DESC) + 'End' FROM PackageDTC Dabei gibt die rotmarkierte innere Abfrage den Wert UAT zurück. Tatsächlich soll also in diesem Fall folgende Abfrage erzeugt werden: SELECT UATEnd FROM PackageDTC Aber statt dem INHALT von UAT gibt er den String UAT selber aus, er macht also folgende Abfrage: SELECT 'UATEnd' FROM PackageDTC Wie kann ich dem SQL Server nun mitteilen, dass ich nicht den String, sondern den INHALT der Spalte UATEnd haben möchte ? Wäre echt lieb, wenn mir da jemand helfen könnte. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 1. August 2008 Teilen Geschrieben 1. August 2008 Es gibt "Stringkonkatination" (meist als concat(string1,string2,...) bezeichnet. Aber Achtung bei der Verwendung: oft gilt wenn ein Argument NULL ist, liefert concat NULL, wenn Du Leerstrings evtl drin haben könntest, dann prüfe erst mit IF-ELSE und liefer nicht null sondern "" HTH Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
CoderboyPB Geschrieben 1. August 2008 Autor Teilen Geschrieben 1. August 2008 Danke für deine Antwort, aber irgendwie klappt das nicht Wäre nett, wenn du das mal in mein Query einbauen könntest, denn so komme ich nicht weiter, obwohl ich einiges ausprobiert habe. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 1. August 2008 Teilen Geschrieben 1. August 2008 Schau Dir bitte im Handbuch Deines DBMS oder des ODBC Treibers den genauen Syntax an. Es kann sein, dass die Funktion auch anders heißt. Du musst bei Deiner Query dafür sorgen, dass das Feld existiert. Ebenso kann es je nach DBMS sein, dass die Felder explizit angegeben werden müssen, dann ist Dein Vorhaben nicht möglich. Ebenso muss der Subselect _genau_ einen Datensatz liefern, bei 2 Datensätzen wäre das Ergebnis nicht mehr definiert Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jan Jansen Geschrieben 1. August 2008 Teilen Geschrieben 1. August 2008 Was du möchtest kannst du mit statischem SQL nicht machen, versuch es mal mal mit dynamischem SQL Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
CoderboyPB Geschrieben 1. August 2008 Autor Teilen Geschrieben 1. August 2008 Habe es jetzt so gemacht, aber das Ergebnis bleibt das Gleiche, ich bekomme den String zurück gegben, nicht aber den INHALT der Spalte DECLARE @TASK nchar(10) SET @TASK = 'UATEnd' SELECT @TASK FROM PackageDTC Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 1. August 2008 Teilen Geschrieben 1. August 2008 Das liegt schlicht und einfach daran, dass Du der DB sagst >>selectiere den String UATEnd für jede Zeile die Du in der Tabelle hast<< Entweder Du schreibst die Spalte hart rein, oder du verwendest dynamisches SQL und baust dir das gesamt SQL zusammen. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
CoderboyPB Geschrieben 1. August 2008 Autor Teilen Geschrieben 1. August 2008 meinst du das hier mit dynamischen SQL ? (Beispiel in PHP) $column = 'UATEnd' $sql = "Select $column FROM PackageDTC"; mysql_query($sql) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 2. August 2008 Teilen Geschrieben 2. August 2008 Richtig. Wenn Die Splate aber immer gleich heißt, würd ich es lieber hart kodieren. Dynamisches SQL macht hier dann keinen Sinn und ist auch unübersichtlicher. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
CoderboyPB Geschrieben 2. August 2008 Autor Teilen Geschrieben 2. August 2008 Tja, und genau diese Option habe ich hier nicht ... Lass es mich dir erklären: Ich soll einen Report für Crystal Reports erstellen, welcher Standardmässig für JEDES Projekt funktioniert. Es soll quasi nur der Name der Datenbank ausgetauscht werden müssen, wenn man ihn anwendet. Das Problem ist aber, dass der Name der TaskSpalte von Projekt zu Projekt variiert. Dieser steht aber in der Tabelle Tasks, so, dass dieser (so dachte ich es mir halt) per Unterabfrage 'on the fly' ermittelt werden kann. OK, nun weiß ich aber weningstens, dass dieser Bericht nicht umsetzbar ist, und muss halt doch für jedes Projekt jeweils den Bericht hartcoden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 2. August 2008 Teilen Geschrieben 2. August 2008 OK, nun weiß ich aber weningstens, dass dieser Bericht nicht umsetzbar ist, und muss halt doch für jedes Projekt jeweils den Bericht hartcoden. Nein das ist so nicht korrekt ! Du kannst beim Aufruf von CR sowohl den SQL String, der als Abfrage hinter dem Report liegt, ebenso wie den Datenbankname über das Viewerobjekt ändern. Dann öffnest Du den Report und Deine Abfrage funktioniert Als andere Idee bliebe einen View zu erstellen, der Dir die Daten über die dynamische Abfrage liefert, CR siehst als View eine einfache Tabelle, auf der Du dann mit statischem SQL arbeiten kannst Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.