sql Frage .. wie kann ich dynamisch Spalten in ein SQL-Abfrage-Ergebnis gesetzt hinzufügen?

StackOverflow https://stackoverflow.com/questions/763454

  •  11-09-2019
  •  | 
  •  

Frage

Ich schreibe einen Bericht zurück Details über ein Objekt ( ‚Dateien‘) in meiner Datenbank. Meine Anwendung können Benutzer ihre eigenen Flaggen für den Einsatz gegen Dateiobjekte erstellen. Flags im Wesentlichen aus einem Namen bestehen, dann speichern Flag Instanzen einen Bit-Wert, um anzuzeigen, ob es für das übergeordnete Dateiobjekt festgelegt ist.

Ich möchte eine Abfrage schreiben, die in der Datenbank eine Zeile pro Datei zurückgibt, wo die ersten paar Spalten in der Ergebnismenge die Dateidetails (ID, Name, Größe usw.) und die restlichen Spalten sind die Flag-Namen enthalten, mit Bit-Werte zurückgegeben, um anzuzeigen, ob das Flag für die angegebene Datei Zeile gesetzt wird.

Ist das sinnvoll? Wie gehe ich über die Abfrage zu schreiben?

Vielen Dank für jede Hilfe.

Edit: Klarstellung ..

Im Rahmen dieser Abfrage, ich brauche eine Sub-Abfrage ausführen, die die Flags zurück, die vom Benutzer erstellt wurde (ich weiß nicht, diese zur Design-Zeit), dann übernehme einen Scheck für jeden Flag-Wert in der Hauptabfrage zurück Details zu den Dateien.

Vereinfachtes Schema wie folgt:

  • Die Datei {ID, Name}
  • Flag {ID, Name}
  • Fileflags {FileId, FlagId} - eine Zeile in dieser Tabelle gibt an, dass das Flag für die Datei festgelegt ist

Ich brauche die Abfrage ein Ergebnis zurückzukehren Set mit Spalten etwas wie folgt aus:

FileId Dateiname Flag1Name Flag2Name .... FlagNName

War es hilfreich?

Lösung

Sie könnten beginnen, indem man die Pivot Funktion in SQL Server 2005+. Damit und einig String-Verkettung sollten Sie in der Lage sein, eine Abfrage für eine beliebige Anzahl von Spalten zu montieren

Basierend auf Ihren Kommentar Ihre wählen würde wie folgt aussehen:

        SELECT <non-pivoted column>,

            [first pivoted column] AS <column name>,

            [second pivoted column] AS <column name>, ...
    From Table 
    PIVOT (
...
FOR 
...
)

Andere Tipps

Warum nicht erstellen eine gespeicherte Prozedur mit der erforderlichen Logik - Abfrage von benutzerspezifischen Fahnen, etc - und auf dieser Basis dynamisch einen Query-String mit den Variablen bauen Sie benötigen

Sie können dann EXECUTE verwenden, um die dynamische Abfrage an den Benutzer eingestellt zurückzukehren. Siehe http://msdn.microsoft.com/en-us/library/ms188332 aspx

Klingt wie Sie vielleicht eine Kreuztabellenabfrage benötigen, wo Sie die Zeilen in Spalten umwandeln möchten. Sind die Flaggen in einer separaten Tabelle als eine zu viele Beziehung zu der übergeordneten Tabelle gespeichert?

Ich glaube, Sie wollen, ist ein Alias. Hier ist ein Beispiel von http://www.sql-tutorial.net/SQL-Aliases .asp

SELECT Employee, SUM(Hours) AS SumHoursPerEmployee
FROM EmployeeHours
GROUP BY Employee 

Ich würde wirklich Ihr Schema muss sehen, weiter zu helfen.

Bearbeiten Vielleicht müssen Sie verschachtelte SELECTs. http://sqlzoo.net/1a.htm

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top