none
Alias für Spalte in Abfrage deklarieren RRS feed

  • Allgemeine Diskussion

  • Hallo und guten Abend,

    ich beschäftige mich seit kurzem mit SQL-Abfragen und möchte den Alias für eine Spalte in einer Abfrage deklarieren (dynamisch erzeugen bzw. berechnen) lassen. Leider bekomme ich das nicht hin. Meine Vorstellung ist folgendermaßen:

    DECLARE @Name varchar;  
    SET @Name = 'Paul';

    select ID as @Name from adressen

    Kann mir jemand helfen? Ich habe Microsoft SQL 2012 am Start.

    Danke und Gruß Thomas





    Mittwoch, 27. Februar 2019 21:34

Alle Antworten

  • Das geht nur mittels dynamischem SQL:
    https://docs.microsoft.com/de-de/sql/relational-databases/system-stored-procedures/sp-executesql-transact-sql?view=sql-server-2017

    Wozu soll das denn gut sein?

    Mittwoch, 27. Februar 2019 23:08
  • Hallo Thomas,

    man kann generell keine Variablen für Objektnamen nutzen. Ich würde hier auch keinen Sinn darin sehe; wie sollte der Konsument der Abfrage den Namen kennen? 


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 28. Februar 2019 06:50
  • Ich halte das genau wie die anderen nicht für zielführend. Falls Du eine Info über die Art der Daten zurück geben willst, könnte ich mir so etwas vorstellen, was aber auch ziemlich sinnfrei ist.

    DECLARE @Name varchar(20);  
    SET @Name = 'Tagesdatum mit Zeit';
    
    select getdate() as Datum , @Name as Name ;

    Übrigens ist ein varchar ohne Längenangabe nur 1 Zeichen lang!


    Einen schönen Tag noch, Christoph - http://www.insidesql.org/blogs/cmu

    Donnerstag, 28. Februar 2019 07:33
  • Ich danke allen für die Hinweise !!! Wie gesagt, ich bin noch nicht so lange dabei und versuche mich Stück für Stück einzugewöhnen.

    Die Abfrage soll z.B. folgende Funktion haben:

    Ich möchte einen Vergleich der Einkäufe im letzten Jahr mit den Einkäufen in diesem Jahr vornehmen. Es sollen jeweils die verkauften Stückzahlen ermittelt werden. Ich will die Abfrage einmal bauen und nicht jedes Jahr die Spaltenbeschriftungen ändern müssen.

    Die Abfrage arbeitet schon dynamisch. Die Filterzeiträume werden schon entsprechend angepasst (über getdate() und Dateadd). Als Spaltenüberschaft soll immer der Jahresname stehen.

    Verkaufe 2018 2019
    Kunde1 7 5
    Kunde2 8 6
    Kunde3 9 3
    Kunde4 5 8
    Kunde5 6 6
    Kunde6 4 9
    Kunde7 7 9
    Kunde8 4 5
    Kunde9 6 2
    Kunde10 7 1

    Das ist aber nur ein Beispiel. Ich habe noch weitere solche Wunschabfragen.

    Donnerstag, 28. Februar 2019 12:32
  • Hi,

    Du wirst die Ausgabe ja wahrscheinlich eh nicht im SSMS machen, sondern in einer anderen Anwendung. Und da sollte man die Spaltennamen ja auch anpassen können.

    Ich würde daher eher was generisches wie:

    SELECT ... AS UmsatzAktuellesJahr,
           ... AS UmsatzVorigesJahr,
           ...
    FROM   ...

    in deiner View oder SP machen und die Ausgabe und Umsetzung der Spaltenüberschrift dann dem Client überlassen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Donnerstag, 28. Februar 2019 13:16
    Moderator
  • Selbst wenn ein Reportingprodukt im Einsatz ist, kann der Spaltennamen von der letztlich gültigen Überschrift ja durchaus abweichen.

    Parameter lassen sich da wahlweise eben auch in der Überschrift anzeigen, so dass ich die SQL-Ergebnisnamen immer gleich halten kann, also wie oben schon gesagt als "Aktuellesjahr", "Vorjahr". Im Report gebe ich aber als Überschrift die Parameter @Jahr, @Vorjahr an.

    Bewege ich mich in einem Client Programm, z.B. C#, stellt sich das Problem ja erst gar nicht.

    Andere hatten das Thema in der Vergangenheit auch schon mal:
    https://www.ms-office-forum.net/forum/showthread.php?t=276606


    • Bearbeitet bfuerchau Donnerstag, 28. Februar 2019 14:36
    Donnerstag, 28. Februar 2019 14:36
  • Danke für den Hinweis, den Beitrag hatte ich auch schon gefunden, leider war für mich nicht die gewünschte Lösung dabei. Ich kann mir nicht vorstellen, dass es diesbezüglich keine Lösung gibt. Ich suche mal weiter, vielleicht habe ich ja Glück. Danke noch mal an alle Beteiligten. Ein externes Reportingprogramm möchte ich nicht verwenden.
    • Bearbeitet Thomas-SN Donnerstag, 28. Februar 2019 20:51
    Donnerstag, 28. Februar 2019 20:15
  • Da verschwendest du deine Zeit. Du kannst uns ruhig glauben, dass es per SQL-Definition keine Möglichkeiten gibt, Ergebnisnamen, Tabellennamen usw. als Variable zu definieren.

    Wenn du allerdings native mit irgendeiner Programmiersprache auf SQL zugreifst, musst du ja den Ergebnisnamen gar nicht als Parameter übergeben sondern führst deinen SQL entsprechend aus.
    Zu beachten ist halt, wie in dem letzten Link, dass der Ergebnisname u.U. in eckige Klammern zu setzen ist.

    Mit welcher Methode greifst du denn auf den SQL-Server zu?
    Poste doch mal diesen Code.

    Freitag, 1. März 2019 08:36
  • Hi,

    Ich suche mal weiter, vielleicht habe ich ja Glück.

    die möglichen Antworten sind begrenzt und wurden schon genannt.

    Direkt in T-SQL: Dynamisches SQL (also das gesamte Statement als String zusammensetzen und den Parameterwert dann als 'SELECT Spalte AS ' + @Spaltennamenparameter + ' ... in den String einbauen)

    Aus einer anderen Anwendung heraus, bei der Du das SQL Statement steuern kannst: Letztendlich ähnlich wie beim T-SQL Beispiel, da Du dort das SQL Statement auch dynamisch erzeugst: ... = $"SELECT Spalte AS {VariableFuerSpaltenname} ..."

    Ansonsten: Generische Spaltennamen wie oben von mir beschrieben und Trennung der Spaltenüberschrift in der Ausgabe von den Spaltennamen im SQL Statement bzw. der Ergebnisliste.

    Man kann natürlich auch noch weitere Spiele spielen aber ganz ehrlich gesagt ist das a) nicht notwendig und b) solange nur Rätselraten, bis Du uns mal verrätst, mit welcher Anwendung Du diese Daten überhaupt ausgibst. Dann kann man auch mal schauen, wie man das dort lösen könnte.

    Ein externes Reportingprogramm möchte ich nicht verwenden.

    Irgendeine Anwendung außerhalb vom SQL Server Management Studio wird es aber sein. Daher: Welche?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Samstag, 2. März 2019 08:29
    Moderator
  • Hallo Stefan, danke für Deine Antwort und die Ausführungen. Ich nutze für die Datenübernahme mittlerweile Excel, da der direkte Export aus dem Microsoft Managenet Studio doch nicht so elegenat ist, wie ich es dachte. Dort kann man natürlich auch den Spaltennamen ändern, das finde ich aber unschön. Letztendlich habe ich es auch so gelöst. Ich habe mittlerweile die Idee aufgegriffen, dass über Kreuztabellen lösen zu können. Leider kam ich noch nicht dazu das zu testen, glaube aber schon, dass das geht. Leider habe ich im Moment schon das nächste Projekt auf dem Tisch, so dass ich es nicht sofort testen kann. Irgendwann werde ich mich aber noch einmal daran setzen. Viele Grüße, einen schönen Abend und ein schönes Wochenende. Thomas
    Samstag, 2. März 2019 18:56
  • Und gerade in Excel kannst du ja native auf die QueryDef-Objekte zugreifen und somit die SQL's anpassen falls überhaupt erforderlich.
    Zu guter letzt, kann man über die Abfrage-Optionen die Zeile der Spaltennamen ausblenden, wenn diese einen stören und über "Namen festlegen" die Spalten benennen sowie eine eigene Überschrift setzen.

    Excel interessiert sich nicht mehr für die Feldnamen des Ergebnisses sondern adressiert immer nur über Zeile/Spalt oder eben Excel-Namen.

    Sonntag, 3. März 2019 12:45