2016-10-31 3 views
-1

J'ai une table store qui ont productName, productNumber, storedInBranch, blockNumber, quantity, notifyIn.Sql requête pour renvoyer la notification de la table de magasin

Si le quantity est inférieur à notifyIn il me avisera et j'ai essayé la requête suivante:

select * from store 
where (quantity < notifyIn) AND (notify > 0) 

qui fonctionne parfaitement mais comme un produit peut être stocké dans plusieurs blockNumbers il me avise même si le montant des produits ne sont pas moins de notifyin,

par exemple .:

productName = monitor, productNumber=123, storedInBranch=kenya, blocknumber=5b, quantity=5, notifyin=4 

productName = monitor, productNumber=123, storedInBranch=kenya, blocknumber=<b>1a</b>, quantity=5, notifyin=4 

de sorte que le Abov La requête retourne à la fois bas ce que je voulais faire est la somme de quantity (5 + 5) et notifyIn 4.

+0

Envisagez de normaliser davantage le schéma de votre base de données pour supprimer le champ répétitif. Pouvez-vous extraire des produits à leur propre table? – useyourillusiontoo

+0

Également extraire des branches à une table avec les informations de branche pertinentes comme la limite de notification – useyourillusiontoo

Répondre

1

Vous comptez ici sur notifyin étant la même valeur dans plusieurs lignes. Vous pourriez faire quelque chose comme

SELECT productNumber, sum(quantity), min(notifyin) 
FROM store 
GROUP BY productNumber 
HAVING sum(quantity) < min(notifyin) 

Je vous encourage à modifier votre schéma si possible pour mieux refléter votre logique de domaine. Peut-être avoir une table séparée avec le numéro de produit et notifier en valeur. De cette façon, vous ne dupliquez pas le notifyin et risquez de stocker des valeurs différentes sur des lignes différentes.

+0

Heureux de l'entendre aider. Veuillez accepter ma réponse si cela vous a aidé à répondre à votre question. – RVid

+0

Lisez ce qui suit: [Que dois-je faire lorsque quelqu'un répond à ma question?] (Https://stackoverflow.com/help/someone-answers). –