Ho una tabella che memorizza 1 riga per 1 sondaggio.
Ogni sondaggio ha ottenuto circa 70 domande, ciascuna colonna presente 1 domandaUnire tabelle per nome colonna, convertire stringa in nome colonna
SurveyID Q1, Q2 Q3 .....
1 Yes Good Bad ......
voglio ruotare questo modo si legge
SurveyID Question Answer
1 Q1 Yes
1 Q2 Good
1 Q3 Bad
... ... .....
Io uso {croce applicare} per raggiungere questo obiettivo
SELECT t.[SurveyID]
, x.question
, x.Answer
FROM tbl t
CROSS APPLY
(
select 1 as QuestionNumber, 'Q1' as Question , t.Q1 As Answer union all
select 2 as QuestionNumber, 'Q2' as Question , t.Q2 As Answer union all
select 3 as QuestionNumber, 'Q3' as Question , t.Q3 As Answer) x
Questo funziona ma non voglio farlo 70 volte quindi ho questa istruzione select
select ORDINAL_POSITION
, COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = mytable
Questo mi dà l'elenco di colonna e posizione della colonna nella tabella. Quindi spero di poter unire in qualche modo la 2a affermazione con la prima affermazione dove per nome della colonna. Tuttavia sto confrontando il contenuto all'interno di una colonna e l'intestazione di una colonna qui. È fattibile? C'è un altro modo per raggiungere questo?
Spero che tu possa guidarmi per favore?
Grazie
non può partecipare al set di risultati a meno che non si utilizzi sql dinamico. più facile usare l'istruzione select per rendere le 70 istruzioni select e poi copiarle con un editor. Questo ti farà risparmiare un po 'di battitura. – Hogan