T-SQL procédure stockée Syntaxe pour retourner les résultats si les lignes existent sur plusieurs jours

StackOverflow https://stackoverflow.com/questions/2202038

  •  18-09-2019
  •  | 
  •  

Question

ce que je dois tester sur ma table est s'il y a des lignes pour un ID utilisateur donné et numéro de commande à deux jours (champ DATETIME pour un horodatage).

Je suis assez sûr que je aurais besoin d'une clause having et c'est la raison pour laquelle je suis ici ... qui me fait peur terriblement.

Était-ce utile?

La solution

Avoir ne devrait pas vous effrayer, 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 (UserID=@UserID) Group By UserID Having Count(*) > 1 

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

if exists (Select UserID, Count(*) From OrderTbl Where (UserID=@UserID) 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: ne savais pas que vous pourriez avoir plusieurs commandes par jour. Cette requête fera ce que vous voulez:

With DistinctDates as (Select Distinct UserID, [DATE] From OrderTbl Where (UserID=@UserID))
Select UserID, Count(*) From DistinctDates  
Group By UserID Having Count(*) > 1 

Autres conseils

Je ne sais pas si je comprends bien votre question, mais cela peut travailler pour vous. Having est votre ami et vous pouvez toujours utiliser la clause WHERE. Cela devrait vous permettre de savoir quel ordre et combo ID utilisateur est INTERVENUES plus d'une fois dans le tableau.

SELECT [UserId], [OrderId]
FROM OrderTable 
WHERE UserId = @UserId
AND OrderId = @OrderId
GROUP BY UserId, OrderId
HAVING Count(*) > 1
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top