Comment puis-je SOMME des Lignes DISTINCTES?
Je suis aux prises avec une requête où j'ai besoin de la SOMME des Lignes DISTINCTES. Il y a une manière de le faire... mais je suis perdu.
Voici ce que j'ai obtenu:
SELECT DISTINCT Zipcodes.CountyID,
us_co_est2005_allData.PopEstimate2005,
us_co_est2005_allData.EstimatesBase2000,
users_link_territory.userID
FROM
Zipcodes Inner Join Users_link_territory ON zipcodes.CountyID =
Users_link_territory.CountyID Inner Join
us_co_est2005_alldata ON zipcodes.FIPS = us_co_est2005_alldata.State AND zipcodes.code
= us_co_est2005_alldata.County
WHERE (users_link_territory.userid = 4)
Cela me donne l'34 lignes qui offrent distincts de la population de chaque comté appartenant à userid4, mais comment pourrais-je obtenir la SOMME de PopEstimate2005 et EstimatesBase2000?
Quelque chose comme (mais ce n'est pas un juridique de la requête):
SELECT DISTINCT Zipcodes.CountyID,
SUM(us_co_est2005_allData.PopEstimate2005) AS Population2005,
SUM(us_co_est2005_allData.EstimatesBase2000) AS Population2000,
users_link_territory.userID
FROM
Zipcodes Inner Join Users_link_territory ON zipcodes.CountyID =
Users_link_territory.CountyID Inner Join
us_co_est2005_alldata ON zipcodes.FIPS = us_co_est2005_alldata.State AND zipcodes.code
= us_co_est2005_alldata.County
WHERE (users_link_territory.userid = 4)
GROUP BY users_link_territory.userid
Bien sûr, dès que j'ai ajouter Zipcodes.CountyID à la fin de la GroupBy, je suis de retour avec mes 34 rangées de nouveau.
Merci beaucoup pour toute aide.
Russell Schutte
.
.
.
.
.
Après l'obtention de la ci-dessous - en particulier Robb j'étais en mesure d'obtenir ce que je voulais vraiment - un total de chaque nom d'utilisateur de la population de détails dans une seule requête:
SELECT SUM(POPESTIMATE2005) AS Expr1, SUM(ESTIMATESBASE2000) AS Expr2, UserID
FROM (
SELECT DISTINCT zipcodes.CountyID, us_co_est2005_alldata.POPESTIMATE2005, us_co_est2005_alldata.ESTIMATESBASE2000, users_link_territory.UserID
FROM zipcodes INNER JOIN
users_link_territory ON zipcodes.CountyID = users_link_territory.CountyID INNER JOIN
us_co_est2005_alldata ON zipcodes.FIPS = us_co_est2005_alldata.STATE AND zipcodes.Code = us_co_est2005_alldata.COUNTY
) As FOO
GROUP BY UserID
Merci à tous ceux qui ont contribué!
Russell Schutte
Juste compris comment faire... merci Todd.
OriginalL'auteur Russell Schutte | 2010-12-16
Vous devez vous connecter pour publier un commentaire.
Si vous voulez juste un chiffre global pour l'essayer
Content que cela a fonctionné pour vous, je suppose que je dois avoir mutilé le code légèrement, tandis que le reformatage, modifié pour inclure le manque distinctes!
Grâce Robb... j'avais essayé de faire une sous-sélection comme ça... mais il était accroché quand j'ai eu la "Syntaxe Incorrecte" message à propos de la dernière parenthèse. Je n'ai jamais su ajouter "comme foo". C'est génial. Quand ai-je besoin?
le
as foo
donne à la table un alias, sqlserver jette un croche quand vous n'avez pas de nom de votre les sous-sélections. Un indice, que vous pourriez trouver garde rsi à la baie est que vous pouvez l'alias d'une table dans votre clause from avec un nom plus court ieus_co_est2005_alldata as dta
ensuite y faire référence dans votre clause select commedta.popestimate2005
OriginalL'auteur Robb
Utilisation GROUPE PAR le long avec le SOMME() et COUNT() agrégats.
En fonction de votre serveur de base de données, ce sera plus efficace que de faire une sous-sélection.
En fait, il suffit de mettre cela dans une sélection interne, puis additionner les colonnes à partir de là.
OriginalL'auteur Byron Whitlock
Une réponse facile est d'utiliser le "group by". Groupe a le même effet avec les mêmes champs distincts, mais vous permet d'utiliser des fonctions d'agrégation. Vous pouvez ajouter un "Avoir" clause d'après le groupe par pour filtrer les enregistrements que vous aimeriez voir.
OriginalL'auteur Zachary Scott