2016-06-30 1 views
0

J'ai une base de données avec 1 362 articles différents, qui peuvent être stockés dans l'un des 112 entrepôts différents.Contrôle SQL par rapport à 2 colonnes

Je voudrais écrire quelque chose qui retournerait les noms de chaque article qui a une valeur de stock de 0 dans tous les différents entrepôts.

J'ai déjà ce qui suit:

SELECT OITW.[ItemCode] AS [Item Code], INV1.[Dscription] AS [Description], 
     OITW.[WhsCode] AS [Warehouse], SUM(OITW.[OnHand]) AS [On Hand] 
FROM OITW 
    INNER JOIN INV1 ON INV1.[ItemCode] = OITW.[ItemCode] 
WHERE INV1.[Dscription] LIKE 'BA SQUID ASSASSIN -Case%' 
GROUP BY OITW.[ItemCode], INV1.[Dscription], OITW.[WhsCode] 
ORDER BY [Warehouse], [On Hand] 

qui retourne:

enter image description here

Cet article ne serait pas applicable car il dispose d'un stock dans 2 entrepôts, par exemple.

J'espère que cette question a du sens. Faites-moi savoir si non et je vais essayer de clarifier.

+0

Certaines données d'exemple seraient très utiles dans ce cas. –

Répondre

1

En supposant que la valeur du stock est jamais négatif, vous pouvez le faire:

SELECT INV1.[ItemCode] AS [Item Code], INV1.[Description] AS [Description], 
FROM OITW INNER JOIN 
    INV1 
    ON INV1.[ItemCode] = OITW.[ItemCode] 
WHERE INV1.[Description] LIKE 'BA SQUID ASSASSIN -Case%' 
GROUP BY OITW.[ItemCode], INV1.[Description], 
HAVING MAX([ON HAND]) = 0; 

Les modifications de votre requête:

  • Le GROUP BY comprend uniquement l'élément et la description, et non pas l'entrepôt ainsi qu'à l'intérieur montants de la main.
  • Le SELECT est modifié pour correspondre au GROUP BY. La clause HAVING applique votre condition.
  • Je vous conseille de ne pas avoir d'espaces dans les noms de vos tables. Utilisez des noms simples afin d'éviter les noms de colonnes.
+0

J'ai suivi votre conseil et retiré la clause WHERE qui m'a donné exactement le résultat que je voulais. Merci beaucoup, – coblenski