Je vais avoir une requête SQL (MSSQLSERVER) où ajouter des colonnes au ResultSet en utilisant les sous-requêtes:SQL: les sous-requêtes sélectives
SELECT P.name,
(select count(*) from cars C where C.type = 'sports') AS sportscars,
(select count(*) from cars C where C.type = 'family') AS familycars,
(select count(*) from cars C where C.type = 'business') AS businesscars
FROM people P
WHERE P.id = 1;
La requête ci-dessus est juste à partir d'une configuration de test qui est un non-sens peu, mais sert assez bien comme exemple je pense. La requête sur laquelle je travaille actuellement couvre un certain nombre de tables complexes qui ne font que détourner l'attention du problème.
Dans l'exemple ci-dessus, chaque enregistrement de la table "people" comporte également trois colonnes supplémentaires: "wantsSportscar", "wantsFamilycar" et "wantsBusinesscar". Maintenant, ce que je veux faire est seulement de faire le sous-menu de chaque colonne supplémentaire si le champ "want ....." respectif dans la table people est mis à "true". En d'autres termes, je veux seulement faire la première sous-sélection si P.wantsSportscar est défini sur true pour cette personne spécifique. Les deuxième et troisième sous-groupes devraient fonctionner de la même manière. Par conséquent, la façon dont cette requête devrait fonctionner est qu'elle affiche le nom d'une personne en particulier et le nombre de modèles disponibles pour les types de voitures qu'elle souhaite posséder. Il peut être intéressant de noter que mon résultat final ne contiendra toujours qu'un seul enregistrement, à savoir celui d'un utilisateur spécifique.
Il est important que si une personne n'est pas intéressée par un certain type de voitures, que la colonne pour ce type ne soit pas incluse dans le résultat final. Un exemple pour être sûr que cela est clair:
Si la personne A veut une voiture de sport et une voiture familiale, le résultat inclurait les colonnes "nom", "voitures de sport" et "voitures de famille".
Si la personne B veut un businesscar, le résultat inclurait les colonnes "name" et "businesscar".
J'ai essayé d'utiliser diverses combinaisons avec les instructions IF, CASE et EXISTS, mais jusqu'à présent je n'ai pas réussi à obtenir une solution syntaxiquement correcte. Est-ce que quelqu'un sait si c'est même possible? Notez que la requête sera stockée dans une procédure stockée.
Je suppose que cela a résolu mon problème pour moi (voir mon commentaire en réponse à la réponse de ChrisCM). Cette solution me permettra de vérifier la valeur des différentes colonnes de mon code de programmation et de prendre les mesures appropriées. C'est assez bon pour moi. Merci. – Jerry