Pregunta

lo que necesito para probar en mi mesa es si hay filas para un ID de usuario dado y la identificación de la orden en dos días separados (campo DATETIME para una marca de tiempo).

Estoy bastante seguro de que iba a necesitar una cláusula que tiene y es por eso que estoy aquí ... que me asusta terriblemente.

¿Fue útil?

Solución

Tener no debe asustar, es sólo un "Dónde" en un campo agregada:

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

Eso te dará todos los usuarios que tienen varios pedidos.

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

le dará el recuento si hay varios registros para el ID de usuario en @IDUsuario y nulo si no.

if exists (Select UserID, Count(*) From OrderTbl Where (UserID=@UserID) Group By UserID 
             Having Count(*) > 1) Select 1 else Select 0

devolverá un 1 si hay varios registros para el usuario, 0 en caso contrario.

Actualización: no se dio cuenta de que se pueden tener varias órdenes por día. Esta consulta va a hacer lo que quiere:

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

Otros consejos

No estoy seguro de si he entendido su pregunta, pero esto puede funcionar para usted. La teniendo es su amigo y todavía se puede utilizar la cláusula WHERE. Esto debería hacerle saber lo que el orden y la combinación de ID de usuario que está ocurriendo más de una vez en la tabla.

SELECT [UserId], [OrderId]
FROM OrderTable 
WHERE UserId = @UserId
AND OrderId = @OrderId
GROUP BY UserId, OrderId
HAVING Count(*) > 1
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top