Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

TOP Abfrage mit AS

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Squall_Titus, 18 Juli 2013.

  1. Squall_Titus

    Squall_Titus Benutzer

    Ich brauche eine Lösung um Name zu maskieren (z.B. als Name_Temp) mit der Abfrage: SELECT TOP (5) Name bekomme ich als Spaltennamen Name ich brauche aber unbedingt etwas anderes als Name, da er mir sonst eine Variable überschreibt.
    Die Möglichkeiten mit SELECT (TOP (5) Name) AS Name_Temp oder nur SELECT TOP (5) Name AS Name_Temp funktionieren nicht.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Geht es als Subselect? select name as name_temp from (select top(5) from ...) foo ?

    Ich nix M$SQL, falls das jetzt Bullshit ist nicht hauen ...
     
  3. ukulele

    ukulele Datenbank-Guru

    Code:
    SELECT TOP (5) Name AS Name_Temp
    muss funktionieren, bei mir gehts wunderbar.
     
  4. Squall_Titus

    Squall_Titus Benutzer

    Die Abfrage geht nur auf dem SQL-Server direkt.

    Ich verwende aber ein Programm, welches mir die Anfrage erst parst. (Geht nicht anders)
    Und da kommt ein Syntax Fehler direkt beim AS.
     
  5. ukulele

    ukulele Datenbank-Guru

    Uh das sollte man natürlich schon erwähnen. Du musst also deinen Parser austricksen. Wenn du glück hast, reicht er Subselects 1:1 an die DB weiter also in etwa so:
    Code:
    SELECT    Name_Temp
    FROM    (    SELECT    TOP (5) Name AS Name_Temp
                FROM    tabelle ) t1
    Wenn nicht hilft nur rumprobieren oder jemanden Fragen der sich mit dem Parser auskennt. Wie heißt denn das Programm wenn man fragen darf?
     
  6. ukulele

    ukulele Datenbank-Guru

    PS: Alternativ könnte man sich direkt in der DB eine Sicht anlegen die den kompletten Select abbildet und im Programm nur die Sicht abfragen.
     
  7. Squall_Titus

    Squall_Titus Benutzer

    Das Programm heißt BPM InSpire (für Großprojekte auf Java-Basis) und übersetzt mir meine Abfragen in die Zielsprache.
    Das mit dem Trick habe ich probiert, aber mein Parser ist da ziemlich penibel und lässt so etwas nicht durchgehen.
     
  8. ukulele

    ukulele Datenbank-Guru

    Läßt er dich auf eine andere Tabelle zugreifen? Dann sollte das mit der Sicht klappen und wäre vermutlich auch die eleganteste Variante.
     
  9. Squall_Titus

    Squall_Titus Benutzer

    Ja der Weg mit der Sicht funktioniert zwar, aber das Problem ist, das ich dann für jeden Kunden ein entsprechendes SQL-Update anbieten muss, damit die die Sichten auch haben..
     
  10. ukulele

    ukulele Datenbank-Guru

    Ansonsten fällt mir nicht mehr viel ein ausser es irgendwie im Subquery zu verstecken, eventuell noch mit einen JOIN der selben Tabelle oder irgendeine Form der Verschachtelung:
    Code:
    SELECT    TOP (5) t1.id,
            t2.Name_Temp
    FROM    tabelle t1
    LEFT JOIN (    SELECT    id,
                        Name AS Name_Temp
                FROM    tabelle ) t2 ON t1.id = t2.id
    Warscheinlich stört er sich aber an AS als Schlüsselwort und wird es unter keinen Umständen anwenden. Mit EXEC wird er sicher auch nölig:
    Code:
    EXEC('SELECT    TOP (5) Name AS Name_Temp FROM tabelle')
    
    Da wäre ein DB Update mit View noch das kleinere Übel aus meiner Sicht denn die Lösung ist sicherlich die eleganteste aus technischer Sicht. Es sei denn es läßt sich am Paser was machen oder machen lassen das dieser Spaltenaliase unterstützt.
     
  11. Tommi

    Tommi Datenbank-Guru

    Hi,

    versuchs mal so:
    Code:
    SELECT TOP 5 Name_Temp=Name FROM ...
    Viele Grüße,
    Tommi
     
  12. Squall_Titus

    Squall_Titus Benutzer

    Danke für die Antworten, aber ich habe eine einfachere Lösung gefunden.
    Ich habe mir einen RepeatContainer gebaut und unterbreche die Wiederholung nach 5 Aufrufen.
    Dadurch bin ich wieder DB-Format unabhängig und muss nicht hacken.
    Des weiteren habe ich von den Entwicklern erfahren, das mann solche spezifischen Anweisungen auch maskieren kann der Form SELECT /*+TOP (5)*/ ...... AS ...... (kommt von ORACLE hints) was mir für zukünftige Dinge sicherlich zugute kommen wird.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden