Oui, cela est possible, mais nécessite SQL dynamique;
Vous pouvez voir une solution connexe qui peut être étendue à votre problème: Pivots with Dynamic Columns in SQL Server 2005
Reproduit en partie ci-dessous, car je pense qu'il est très cool:
Cette requête fonctionne à la fois sur SQL Server 2000 et 2005 Il est efficace, mais certains peuvent ne pas l'aimer car il utilise la même variable (@cols) des deux côtés d'une affectation. Une autre solution qui fonctionne uniquement sur SQL Server 2005 consiste à utiliser XML PATH.
DECLARE @cols NVARCHAR(2000)
SELECT @cols = STUFF((SELECT DISTINCT TOP 100 PERCENT
'],[' + t2.ColName
FROM Table1 AS t2
ORDER BY '],[' + t2.ColName
FOR XML PATH('')
), 1, 2, '') + ']'
Cette liste de colonnes est utilisée deux fois dans la requête pivot que nous cherchons à construire. Une fois qu'il est utilisé dans la liste des colonnes que nous voulons récupérer, et une fois qu'il est utilisé comme la liste des valeurs qui devraient devenir des colonnes. Après avoir construit cette liste de colonnes ci-dessus, nous pouvons juste concaténer avec les parties manquantes de la requête de pivot comme:
DECLARE @query NVARCHAR(4000)
SET @query = N'SELECT tID, '+
@cols +'
FROM
(SELECT t2.tID
, t1.ColName
, t2.Txt
FROM Table1 AS t1
JOIN Table2 AS t2 ON t1.ColId = t2.ColID) p
PIVOT
(
MAX([Txt])
FOR ColName IN
('+
@cols +')
) AS pvt
ORDER BY tID;'
L'exécution de cette avec
EXECUTE(@query)
nous donnera le résultat attendu: une table est pivoté et affiche les colonnes qui ont été spécifiées dans un tableau:
tID Country Day Month
----------- ---------- ---------- ----------
1 US 4 July
2 US 11 Sep
3 US 25 Dec
Probablement non. Y a-t-il un nombre fixe de réponses? –
Quelle est la structure, etc. à partir de laquelle vous accédez à mysql? Cependant, je ne comprends pas le but de produire des données d'enquête brutes (non agrégées). Avez-vous seulement 4 participants? – Flinsch
probablement pas ... à moins de casser chaque réponse en utilisant la sous-requête – ajreal