2010-04-22 3 views
1

j'ai les tableaux ci-dessous ci-dessousLignes et colonnes SQL dynamiques ... les cellules requièrent une requête ultérieure. Meilleure approche?

City 
--------- 
CityID 
StateID 
Name 
Description 

Reports 
--------- 
ReportID 
HeaderID 
FooterID 
Description 

Je suis en train de générer une grille pour une utilisation dans un contrôle .Net (Gridview, Listview ... autre question au sujet de ce qui sera le « meilleur » un à utiliser pour mon fins) qui affecteront les rapports en tant que colonnes et les villes en tant que lignes.

Quelles sont les villes s'affichent est basée sur l'état sélectionné et est assez facile

SELECT * FROM CITIES WHERE [email protected] 

Cependant, l'utilisateur est en mesure de sélectionner les rapports sont générés pour chaque ville (démographie, ventes, superficie des terres, etc.). En outre, les cellules résultantes (City * Report) sont une sous-requête sur différentes tables en fonction de la ville sélectionnée et du rapport.

Ie. Les ventes de la colonne de rendements sélectionnés

SELECT * FROM SALES WHERE [email protected] 

J'ai programmé une solution très inélégante en utilisant plusieurs requêtes et forçage brute de la grille à créer (ligne par ligne, ligne par la création de la ligne d'éléments de données), mais je suis positif il doit y avoir une meilleure façon d'accomplir cela ...? Toutes/toutes les suggestions appréciées ici car l'approche de la force brute que j'ai obtenue est lente et lourde ... et cela devra être souvent utilisé par le client, donc je ne suis pas sûr que ce soit acceptable dans sa mise en œuvre actuelle.

+0

Obtenez le 'à JOIN '. –

+0

Je peux assez facilement joindre les tables, cependant, ce sont les requêtes suivantes qui me causent le chagrin .... cela et pas toutes les villes auront des données pour chacun des rapports. J'ai regardé un tableau de villes temporaires, avec des colonnes générant dynamiquement pour chaque rapport/colonne, mais j'ai échoué avec les valeurs nulles – Pyrrhonist

Répondre

0

Puisque vous aviez des problèmes avec les villes n'ayant pas tous les rapports, avez-vous essayé Left Jointures? Pour obtenir les lignes de votre grille vous pouvez faire:

select sales.amt, Demographics.amt, LandArea.amt from cities left join sales on cities.cityid = sales.cityid 
left join Demographics on cities.cityid = Demographics.cityid 
left join LandArea on cities.cityid = LandArea.cityid 

Le seul inconvénient de la requête ci-dessus est que les types de rapports (démographie, ventes, superficie des terres, etc.) sont fixés dans la requête. Peut-être que vous pouvez mélanger la requête ci-dessus avec la requête dynamique que vous avez mentionnée.

Peut-être que montrer le code pour la grille vous aidera à obtenir de meilleures réponses?

Espérons que ça aide.

+0

Pas d'internet sur mon ordinateur portable dev, donc avoir à subir pseudo-code ... foreach row foreach column requête passant en ligne et colonne variable Effectuer efficacement une requête pour chaque cellule de la grille. Interroger un état avec seulement quelques villes et rapports sélectionnés ... pas un biggy. Ramassez Cali avec six ou huit rapports? Pas si bon. Comme mentionné, j'ai une solution ... mais elle me semble inefficace et coûteuse ... – Pyrrhonist

Questions connexes