SPROC T-SQL Sintassi per restituire risultati se esistono file su più giorni
-
18-09-2019 - |
Domanda
quello che mi serve per testare sul mio tavolo è se ci sono le righe per un dato user id e ID ordine in due giorni separati (campo datetime per un timestamp).
Sono abbastanza sicuro che avrei bisogno di una clausola having ed è per questo che sono qui ... che mi spaventa terribilmente.
Soluzione
Avere non dovrebbe spaventare voi, è solo un "Dove" su un campo aggregata:
Select UserID, Count(*) From OrderTbl Group By UserID Having Count(*) > 1
Che ti do tutti gli utenti che hanno più ordini.
Select UserID, Count(*) From OrderTbl Where (UserID=@UserID) Group By UserID Having Count(*) > 1
vi darà il conteggio se ci sono più record per l'ID utente in @UserID e nulla in caso contrario.
if exists (Select UserID, Count(*) From OrderTbl Where (UserID=@UserID) Group By UserID
Having Count(*) > 1) Select 1 else Select 0
restituirà un 1 se non ci sono più record per l'utente, 0 in caso contrario.
Aggiornamento: non si rese conto che si potrebbe avere più ordini al giorno. Questa query fare quello che vuoi:
With DistinctDates as (Select Distinct UserID, [DATE] From OrderTbl Where (UserID=@UserID))
Select UserID, Count(*) From DistinctDates
Group By UserID Having Count(*) > 1
Altri suggerimenti
Non so se ho capito la tua domanda, ma questo può funzionare per voi. Il avendo è tuo amico e si può ancora utilizzare la clausola WHERE. Questo dovrebbe farvi sapere che ordine e user id combo si sta verificando più di una volta nella tabella.
SELECT [UserId], [OrderId]
FROM OrderTable
WHERE UserId = @UserId
AND OrderId = @OrderId
GROUP BY UserId, OrderId
HAVING Count(*) > 1