Benutzer mit den meisten Antworten
Spaltennamen zusammenseten ?

Frage
-
Hallo zusammen
ist Es möglich in einer Abfrage den Spaltenname in einer Select-Anweisung dynamisch zusammen zu setzen? (ohne Case)
Beispiel: Tabelle Test mit Spalten
Artikel, Attr1, Attr2, Attr3
1002, XYZ, NULL, NULL
2001, NULL, ABC, NULL
3004, NULL, NULL, RST
Nun möchte ich Abhängig von der ersten Ziffer der Artikelnummer die Spalten Attr1 / 2 oder 3 abfragen. ungefähr so:
select Test.'Attr' & Left(Test.Artikel , 1) as Result
From Database
Where Blabla
Weiss jemand für sowas ´ne Lösung? oder gibt es da eine Funktion?
Ist so etwas Alternativ im Reporting-Tool möglich?
DANKE
SisualStudio express 2012 C#
Antworten
-
Du kanst drei separate Selects bauen, die jeweils nur die Zeilen liefern, deren Artikelnummer mit 1, 2 und 3 beginnen. Dazu das Attr1, Attr2 bzw. Attr3 pcken und danch die drei SELECT-Anweisungen per UNION miteinander verbinden.
In etwa so: (nicht ausprobiert, aus der Hüfte geschossen)
SELECT Artikel, Attr1 AS Attr FROM Tabelle WHERE LEFT(Artikel, 1) = '1' UNION SELECT Artikel, Attr2 AS Attr FROM Tabelle WHERE LEFT(Artikel, 1) = '2' UNION SELECT Artikel, Attr3 AS Attr FROM Tabelle WHERE LEFT(Artikel, 1) = '3'
Damit würdest du zumindest dynamisches SQL umgehen.
Andreas Richter
Softwareentwickler
http://www.anrichter.net- Als Antwort markiert kudlmudl Donnerstag, 14. November 2013 05:55
Alle Antworten
-
Hallo kudlmudl,
ja dies ist möglich. Das Zauberwort hiefür lautet dynamisches SQL. Im einfachsten Fall würde dies wie folgt aussehen:
DECLARE @colname varchar(10) SELECT @colname = LEFT(Artikel,1) FROM Tabelle SELECT @colname = 'Attr'+@colname EXEC ('SELECT '+@colname+' FROM Tabelle')
Auf alle Fälle solltest Du dir aber folgenden Beitrag mal ansehen:
Dynamisches SQL: Fluch und Segen -
Danke Falk für Deine schnelle Antwort.
Welche Vorausetzung muss für Dyn. SQL erfüllt sein, weil ich nur eine Fehlermeldung "Konstrukt oder die Anweisung "Deklarieren" wird nicht unterstützt." vom Report-Building bekomme.
SisualStudio express 2012 C#
-
Du kanst drei separate Selects bauen, die jeweils nur die Zeilen liefern, deren Artikelnummer mit 1, 2 und 3 beginnen. Dazu das Attr1, Attr2 bzw. Attr3 pcken und danch die drei SELECT-Anweisungen per UNION miteinander verbinden.
In etwa so: (nicht ausprobiert, aus der Hüfte geschossen)
SELECT Artikel, Attr1 AS Attr FROM Tabelle WHERE LEFT(Artikel, 1) = '1' UNION SELECT Artikel, Attr2 AS Attr FROM Tabelle WHERE LEFT(Artikel, 1) = '2' UNION SELECT Artikel, Attr3 AS Attr FROM Tabelle WHERE LEFT(Artikel, 1) = '3'
Damit würdest du zumindest dynamisches SQL umgehen.
Andreas Richter
Softwareentwickler
http://www.anrichter.net- Als Antwort markiert kudlmudl Donnerstag, 14. November 2013 05:55
-
Danke Andreas
das hat zwar nicht ganz mein eigendlich angestrebtes Ergebnis gebracht, jedoch bringt es mich, zumindest über Umwege, zum Ziel.
Das mit Dynamic SQL ist auch ein guter Ansatz, jedoch wird es scheinbar von unserem VisualStudio(ReportService) nicht unterstützt.
Danke für die Antworten
SisualStudio express 2012 C#