Sproc T-SQL Sintaxis para volver resultados si existen filas en varios días
-
18-09-2019 - |
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.
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