domanda sql .. come posso aggiungere dinamicamente colonne ad un risultato domanda di sql set?
-
11-09-2019 - |
Domanda
Sto scrivendo un rapporto per restituire i dettagli su un oggetto ( 'files') nel mio database. La mia applicazione consente agli utenti di creare le proprie bandiere per l'uso contro oggetti file. Bandiere essenzialmente costituiti da un nome, poi le istanze di bandiera memorizzare un valore di bit per indicare se è impostato per l'oggetto file principale.
Voglio scrivere una query che restituisce una riga per ogni file nel database, in cui le prime colonne del set di risultati contengono i dettagli del file (id, nome, dimensione, ecc) e le restanti colonne sono i nomi di bandiera, con I valori di bit restituito per indicare se il flag è impostato per la data riga del file.
Ha senso? Come posso fare per scrivere la query?
Grazie per qualsiasi aiuto.
Modifica: Chiarimento ..
Come parte di questa domanda, ho bisogno di eseguire una query sub che restituisce le bandiere che sono state create dall'utente (non so questi in fase di progettazione), poi incorporare un assegno per ogni valore bandiera nella query principale per restituire i dettagli sui file.
schema semplificato come segue:
- File {Id, Name}
- Bandiera {Id, Name}
- FileFlags {FileId, FlagId} - una riga in questa tabella indica che il flag è impostato per il file
Ho bisogno della query per restituire un set di risultati con colonne qualcosa di simile:
FileId nomefile Flag1Name Flag2Name .... FlagNName
Soluzione
Si potrebbe iniziare a guardare la Pivot funzione disponibile in SQL Server 2005 +. Con questo e un po 'di concatenazione di stringhe si dovrebbe essere in grado di assemblare una query per qualsiasi numero di colonne
In base al commento il vostro prescelto sarebbe simile a questa:
SELECT <non-pivoted column>,
[first pivoted column] AS <column name>,
[second pivoted column] AS <column name>, ...
From Table
PIVOT (
...
FOR
...
)
Altri suggerimenti
Perché non creare una stored procedure con la logica necessaria - interrogazione bandiere specifiche per l'utente, ecc -? E su questa base creare dinamicamente una stringa di query con le variabili è necessario
È quindi possibile utilizzare EXECUTE
per restituire la query dinamica impostato per l'utente. Vedere http://msdn.microsoft.com/en-us/library/ms188332 aspx
Suona come forse avete bisogno di una query a campi incrociati, in cui si desidera attivare le righe in colonne. Sono le bandiere memorizzati in una tabella separata come uno a molti relazione alla tabella padre?
Penso che si desidera è un alias. Ecco un esempio da http://www.sql-tutorial.net/SQL-Aliases asp
SELECT Employee, SUM(Hours) AS SumHoursPerEmployee
FROM EmployeeHours
GROUP BY Employee
Vorrei davvero avere per vedere lo schema per aiutare ulteriormente.
Modifica
Forse avete bisogno di SELECT
s nidificati.
http://sqlzoo.net/1a.htm