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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top