2010-08-25 9 views
3

Ma base de données enregistrement est comme ci-dessous: -requête SQL distincte

cartid orderid foodid qty 
============================== 
92  107  5  1 
93  107  5  1 
94  107  5  1 
95  107  11  1 
96  107  5  1 
97  108  5  1 

Peut-on organiser dans ce formulaire?
On suppose que la somme maximale (qté) = 3

foodid sum(qty) 
================= 
5  3 
11  1 
5  2 
+0

Je crois que vous voulez seulement 2 premières rangées, non? –

+0

vous devez utiliser groupe par condition sur votre sql et sur la table chaque champ d'enregistrement a des valeurs différentes mais le foodid peut être utilisé sur grouping..if groupping par food id est prévu le résultat devrait être sum (qty) 5 pour foodid 5 et sum (qté) 1 pour foodid 11 pour les valeurs Db que vous postez – dankyy1

Répondre

0

Je ne sais pas ce que vous entendez par Max Somme (qté) = 3 ...

Mais voici quelques SQL pour vous aider a commencé:

SELECT  foodid 
      , SUM(qty) 
FROM  YourTableName 
GROUP BY foodid 
+0

Je pense que la subtilité dans la question est qu'il devrait y avoir plusieurs rangées pour un foodid spécifique où les disques sont mélangés (dans l'ordre de cartid) avec d'autres foodids. par exemple. regrouper les ensembles en fonction de la séquence, jusqu'à ce qu'un aliment différent – AdaTheDev

+0

ce n'est pas ce que maniacCow veut. Si vous voyez les résultats le foodid = 5 apparaît deux fois. –

5

on dirait que vous essayez de résumer plages contiguës (îles) du même foodid commandés par cartid?

;with cart as 
(
SELECT 92 AS cartid,107 AS orderid,5 AS foodid, 1 AS qty UNION ALL 
SELECT 93,107,5, 1 UNION ALL 
SELECT 94,107,5, 1 UNION ALL 
SELECT 95,107,11,1 UNION ALL 
SELECT 96,107,5, 1 UNION ALL 
SELECT 97,108,5, 1 

), 
NumberedCart As 
(
SELECT cartid,foodid,qty, 
ROW_NUMBER() OVER (ORDER BY cartid)- 
     ROW_NUMBER() OVER (PARTITION BY foodid ORDER BY cartid) AS G 
FROM cart 
) 

SELECT foodid, SUM(qty) AS [sum(qty)] 
FROM NumberedCart 
GROUP BY foodid,G 
ORDER BY MIN(cartid) 

Retours

foodid  sum(qty) 
----------- ----------- 
5   3 
11   1 
5   2 
+0

+1: Belle utilisation des CTE –

Questions connexes