domanda sql .. come posso aggiungere dinamicamente colonne ad un risultato domanda di sql set?

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

  •  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

È stato utile?

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 SELECTs nidificati. http://sqlzoo.net/1a.htm

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top