2008-10-20 9 views
0

J'ai une question que j'utilise pour la cartographie dans les services d'information qui ressemble à:union sql avec un composant d'agrégation

 
(SELECT Alpha, Beta, Gamma, Delta, Epsilon, Zeta, Eta, Theta, Iota, Kappa, Lambda, Mu,Nu, Xi from tbl 
WHERE  
Alpha in (@Alphas) and 
Beta in (@Betas) and 
Gamma in (@Gammas) and 
Delta in (@Deltas) and 
Epsilon in (@Epsilons) and 
Zeta in (@Zetas) and 
Eta in (@Etas) and 
Theta in (@Thetas)) 
UNION 
(SELECT Alpha, Beta, Gamma, Delta, Epsilon, Zeta, Eta, Theta, Iota, Kappa, Lambda, Mu,Nu, Omicron from tbl 
WHERE  
Alpha in (@Alphas) and 
Beta in (@Betas) and 
Gamma in (@Gammas) and 
Delta in (@Deltas) and 
Epsilon in (@Epsilons) and 
Zeta in (@Zetas) and 
Eta in (@Etas) and 
Theta in (@Thetas)) 

Alpha par Theta doivent être utilisés dans deux champs calculés qui les concatènent (disons Alpha, Beta, Gamma) dans une chaîne dans un champ. L'instruction select pour Omicron va générer le même nombre de lignes que Xi mais je veux vraiment agréger Omicron, donc si la requête Select avec Xi produit 9 items de légende, la sélection agrégée pour Omicron ne devrait produire qu'un seul élément de légende car les valeurs Les Alpha à Thêta ne sont pas importants pour Omicron. Comment la requête devrait-elle être structurée pour que je puisse utiliser l'Alpha à travers Thêta comme paramètres mais encore agréger Omicron?

Répondre

1

Je ne suis pas sûr de ce que vous voulez vraiment, mais si je comprends bien, vous pouvez essayer quelque chose comme:

(SELECT a,b,c,d FROM k 
WHERE a in (@a) and b in (@b) and c in (@c)) 
UNION 
(SELECT NULL,NULL,NULL,sum(e) FROM k 
WHERE a in (@a) and b in (@b) and c in (@c) GROUP BY e) 

NULLs juste pour être en mesure d'effectuer l'union (maintenir la quantité de colonnes, vous pourrait avoir à faire un aliasing de colonne)

0

Pourquoi ne sélectionnez-vous pas simplement tous les Grecs, Xi et Omicron dans une instruction select et calculez la somme dans la langue hôte? C'est une requête potentiellement coûteuse au lieu de deux.

+0

Je ne pense pas avoir compris votre réponse. Les données d'origine étaient une sélection directe et préparaient les données dans les services de reporting avant de les utiliser dans un rapport. À quoi ressemblerait votre sql alors? – TheObserver