2010-02-04 6 views

Répondre

2

Avoir ne devrait pas vous faire peur, il est juste un « Où » sur un champ agrégé:

Select UserID, Count(*) From OrderTbl Group By UserID Having Count(*) > 1 

Cela vous donnera tous les utilisateurs qui ont plusieurs commandes.

Select UserID, Count(*) From OrderTbl Where ([email protected]) Group By UserID Having Count(*) > 1 

vous donnera le nombre s'il y a plusieurs enregistrements pour l'ID utilisateur dans @UserID et null sinon.

if exists (Select UserID, Count(*) From OrderTbl Where ([email protected]) Group By UserID 
      Having Count(*) > 1) Select 1 else Select 0 

retournera 1 s'il y a plusieurs enregistrements pour l'utilisateur, 0 sinon.

Mise à jour: Je ne savais pas que vous pouviez avoir plusieurs commandes par jour. Cette requête fera ce que vous voulez:

With DistinctDates as (Select Distinct UserID, [DATE] From OrderTbl Where ([email protected])) 
Select UserID, Count(*) From DistinctDates 
Group By UserID Having Count(*) > 1 
+0

C'est un bon début, mais j'ai besoin de tester si elles ont des commandes passées sur différents jours. En d'autres termes, s'ils ont 15 ordres le 2/4/2010, ils devraient toujours retourner un 0. Si toutefois ils ont 1 ordre le 2/3/2010, et 15 ordres le 2/4/2010, il devrait retourner un 1. – Kyle

+0

J'ai essayé de regrouper selon mon champ de datation en pensant que ça m'amènerait là, mais pas de dés ... des idées? – Kyle

+0

Je l'ai corrigé, Kyle, une fois je suis revenu et j'ai vu votre note. Désolé de ne pas lire plus attention la première fois! –

0

Je ne sais pas si je comprends bien votre question, mais cela peut travailler pour vous. Le HAVING est votre ami et vous pouvez toujours utiliser la clause WHERE. Cela devrait vous permettre de savoir quel ordre et quel identifiant d'utilisateur apparaît plus d'une fois dans la table.

SELECT [UserId], [OrderId] 
FROM OrderTable 
WHERE UserId = @UserId 
AND OrderId = @OrderId 
GROUP BY UserId, OrderId 
HAVING Count(*) > 1 
+0

et en outre, ces enregistrements doivent être sur DIFFERENTS jours ... – Kyle

+0

J'ai corrigé la faute de frappe (ma faute), mais ... la question originale n'était pas claire. Il lit "s'il y a des lignes pour un [identifiant d'utilisateur et identifiant de commande] donné pendant deux jours". Cette requête lui donnerait un piont de départ pour ensuite trouver ces différents jours. Il n'y avait pas de détails spécifiques sur le schéma ou le type de données qui peuplerait la table. Il n'a pas précisé s'il connaissait le OrderId ou l'ID utilisateur qu'il cherchait (désolé j'ai fait une supposition), ou même s'il pouvait y avoir plusieurs commandes en une seule journée. – AGoodDisplayName

+0

Aucune excuse nécessaire. J'ai enlevé le downvote et effacera les commentaires ci-dessus. Je déteste déprécier les gens quand ils essaient juste d'être utiles, alors je suis heureux de changer le vote. –