2010-11-05 4 views
0

J'ai 2 tables UnitProd et unité.SQL imbriqué Sélectionnez .... Je pense?

Unit = unitproductivityid,unitid, unitnumber, fleet 
UnitProd = unitproductivityid, day, shipweight, stops 

je plusieurs unités dans chaque table et je suis en train de faire groupe par des fonctions pour obtenir compte de choses différentes. (Les tableaux ont plus de champs que spécifié, ce sera des fins seulement par exemple.)

donc au fond, je donne les résultats suivants:

SELECT 
u.[Fleet] 
,u.[Unit] 
,up.[Day] 
,((SUM(up.[Shipment_Weight]))/2000) AS [ShipmentWeight] 
,((SUM(up.[Shipment_Weight]))/COUNT(up.[Stops])) AS [ShpmntAvg] 
FROM 
[dbo].[UnitProductivity] u 
INNER JOIN [dbo].[UnitProductivityDetails] up 
ON u.UnitProductivityId = up.UnitProductivityId 
GROUP BY u.fleet, u.unit 

donc, fondamentalement, la question que j'ai est que certains jusqu'à [arrêts] champs ont un 0 en eux donc je veux les exclure.. Donc, fondamentalement, une unité a 1-30 jours n'importe quoi et certains de ces jours ont un 0 comme [Stop] donc je veux compter (SEULEMENT JOURS avec un arrêt). Aurais-je utiliser un select imbriqué ici et comment?

Merci

+1

Si vous voulez exclure les ups avec 0 dans leur champ, ne devriez-vous pas les filtrer dans la clause where? – skaz

Répondre

4

À moins que je suis mauvaise compréhension de la question, vous n'avez pas besoin d'un SELECT imbriquée.

Il suffit d'ajouter ce qui suit avant votre GROUP BY:

WHERE up.[Stops] > 0 
+0

Comme il s'agit d'un nombre, il devrait cependant être dans une clause 'HAVING'. – JNK

+0

Ce n'est pas un compte, c'est une colonne à laquelle COUNT est appliqué. Très, très grande différence. –

+0

J'ai mal lu! Excuses. – JNK

-1

après votre GROUP BY ligne, ajoutez PRESENTANT nombre> 0

-1

avec le code existant que vous pouvez faire HAVING (jusqu'à [arrêts].) :

SELECT u.[Fleet] ,u.[Unit] ,up.[Day] ,((SUM(up.[Shipment_Weight]))/2000) AS [ShipmentWeight] ,((SUM(up.[Shipment_Weight]))/COUNT(up.[Stops])) AS [ShpmntAvg] FROM [dbo].[UnitProductivity] u INNER JOIN [dbo].[UnitProductivityDetails] up ON u.UnitProductivityId = up.UnitProductivityId GROUP BY u.fleet, u.unit HAVING(COUNT(up.[Stops]) > 0

en savoir plus sur HAVING sur: http://www.w3schools.com/sql/sql_having.asp

0

Il ne doit pas être imbriquées, mais voici un moyen simple:

SELECT * FROM Unit WHERE unitproductivityid IN (SELECT unitproductivityid FROM UnitProd WHERE stops > 0) as UP 

Bonne chance!