Veröffentlicht 1. August 200817 j 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.
1. August 200817 j 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
1. August 200817 j 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.
1. August 200817 j 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
1. August 200817 j Was du möchtest kannst du mit statischem SQL nicht machen, versuch es mal mal mit dynamischem SQL
1. August 200817 j 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
1. August 200817 j 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
1. August 200817 j meinst du das hier mit dynamischen SQL ? (Beispiel in PHP) $column = 'UATEnd' $sql = "Select $column FROM PackageDTC"; mysql_query($sql)
2. August 200817 j 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
2. August 200817 j 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.
2. August 200817 j 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
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.