2013-03-13 2 views
2

Salut, je suis nouveau à la programmation Sql.Comment écrire une requête select dans la clause "in" du tableau croisé dynamique?

J'ai une table « Temp » ayant deux champs « Nom » & « Software »

Je suis une table pivotante qui affiche le nom et le nombre de versions de logiciels à lui.

Ma requête pour pivot est:

select * from temp 
pivot(count(Software) for Software in ([Professional],[Personal],[Standard])) as PVT 

Mais au lieu de donner une valeur statique dans in ([Professional],[Personal],[Standard])

Je veux sélectionner les noms de logiciels de requête select qui devrait être: select distinct software from temp

Quand je écrire cette requête select dans la clause in error.

Comment puis-je y parvenir?

Aidez-nous s'il vous plaît. Merci d'avance.

+0

La liste doit être une liste prédéfinie d'éléments statiques. Imaginez que la liste devienne une liste dynamique: les noms de colonne seraient inconnus à la compilation de la requête. Comment l'analyseur doit-il vérifier la syntaxe? – Claude

+0

Monsieur, j'ai cherché sur internet et j'ai trouvé que stocker la requête dans une variable et passer cette variable à la clause 'in'. Mais en fait je ne sais pas comment l'implémenter. @Michael –

+2

Dans ce cas, vous devez construire toute votre requête dymanically et vous devez l'exécuter en utilisant 'exec'. – Claude

Répondre

2
Declare @cols nvarchar(max) 
select @cols = 
stuff((select distinct ',[' + Ltrim(rtrim(Software)) +']' from temp FOR XML PATH('')),1,1,''); 

EXEC('select * from temp pivot(count(Software) for Software in ('[email protected]+')) as PVT') 

La variable @cols contiendra les lignes extraites de la requête select distinct Software from temp au format XML: qui est [Standard],[Personal],[Professional] et le résultat est envoyé à l'instruction de requête de pivot à l'aide EXEC() fonction.

Questions connexes