Disons que j'ai des données, que ce soit dans une table SQL Server 2008 ou une variable [Table] -Typed: Je souhaite récupérer les données comme un ensemble de résultats qui ressemble Ceci: P> author_id review_id 1 2 3 4 5
88540 99001 719 720 721 722 723
36414 24336 302 303 304 305 306
5 Réponses :
select * from @t pivot ( max(answer_id) for question_id in ([1],[2],[3],[4],[5]) ) pivotT The only way to vary the list ([1],[2],[3],[4],[5]) would be to build this query in a string (dynamically) and then execute it.
En fait, vous feriez mieux de faire cela dans le client. Supposons que vous utilisiez des services de rapport, obtenez les données conformément à votre premier ensemble de résultats et l'affiche à l'aide d'une matrice, avec Author_ID et Review_ID dans le groupe de lignes, question_Id dans le groupe de colonnes et max (réponse_id) au milieu.
Une requête est faisable, mais vous auriez besoin de SQL dynamique en ce moment. P>
... quelque chose comme: p>
Cela semble être ce dont j'ai besoin. Je vais lui donner un coup et faire un coup de retour - merci!
S'il vous plaît garder à l'esprit la sous-requête. Si vous utilisez simplement "Select * à partir de votretable", toutes les autres colonnes impliquées affecteront le regroupement implicite que la fonction pivot fournit. Et si vous avez des erreurs, commencez la ligne EXEC code>, le remplaçant par
Sélectionnez @qry code>
Je n'utilise jamais [SELECT *]] plus - J'adore toujours explicitement les colonnes que j'accède - afin que ce ne soit pas un problème. Et oui, j'utilisais [Sélectionnez @qry] pendant un moment afin que je puisse voir / déboguer la déclaration SQL générale avant de courir. Votre code a travaillé comme promis - merci beaucoup pour votre aide!
voir Cette réponse P>
Fondamentalement, vous pré-inspecter les données pour obtenir les colonnes, puis générer dynamiquement le SQL à l'aide de la liste de pivotements dynamique. Il n'y a vraiment pas de manière non dynamique, car la définition des colonnes de l'ensemble que vous souhaitez revenir n'est pas corrigée. P>
SELECT author_id, review_id, [1], [2], [3], [4], [5] FROM ( SELECT author_id, review_id, question_id, answer_id FROM the_table ) up PIVOT (MAX(answer_id) FOR