SPROC T-SQL-Syntax Ergebnisse zurück, wenn Zeilen auf mehrere Tage bestehen
-
18-09-2019 - |
Frage
Was muss ich auf meinem Tisch testen ist, wenn es Zeilen für einen bestimmten Benutzer-ID und Auftrags-ID an zwei verschiedenen Tagen (DATETIME- Feld für einen Zeitstempel).
Ich bin mir ziemlich sicher, dass ich brauchen würde eine having-Klausel und das ist, warum ich hier bin ... das macht mir Angst schrecklich.
Lösung
Mit sollten Sie nicht erschrecken, es ist nur ein "Wo" auf aggregierter Feld:
Select UserID, Count(*) From OrderTbl Group By UserID Having Count(*) > 1
Das wird Ihnen alle Benutzer, die mehrere Aufträge haben.
Select UserID, Count(*) From OrderTbl Where (UserID=@UserID) Group By UserID Having Count(*) > 1
geben Sie die Zählung, wenn mehrere Datensätze für die Benutzer-ID in @UserID sind und null, wenn es nicht.
if exists (Select UserID, Count(*) From OrderTbl Where (UserID=@UserID) Group By UserID
Having Count(*) > 1) Select 1 else Select 0
ein 1 zurück, wenn es mehrere Datensätze für die Benutzer sind, 0, wenn nicht.
Update: Haben Sie nicht erkennen, dass Sie mehrere Aufträge pro Tag haben könnte. Diese Abfrage wird das tun, was Sie wollen:
With DistinctDates as (Select Distinct UserID, [DATE] From OrderTbl Where (UserID=@UserID))
Select UserID, Count(*) From DistinctDates
Group By UserID Having Count(*) > 1
Andere Tipps
Ich bin nicht sicher, ob ich Ihre Frage verstanden, aber dies für Sie arbeiten kann. Der HAVING ist Ihr Freund und Sie können immer noch die WHERE-Klausel verwenden. Das sollten Sie wissen lassen, was Ordnung und Benutzer-ID-Combo ist in der Tabelle mehr als einmal auftreten.
SELECT [UserId], [OrderId]
FROM OrderTable
WHERE UserId = @UserId
AND OrderId = @OrderId
GROUP BY UserId, OrderId
HAVING Count(*) > 1