sql Frage .. wie kann ich dynamisch Spalten in ein SQL-Abfrage-Ergebnis gesetzt hinzufügen?
-
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
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 SELECT
s.
http://sqlzoo.net/1a.htm