SPROC T-SQL Синтаксис для возврата результатов, если строки существуют в течение нескольких дней - PullRequest
0 голосов
/ 04 февраля 2010

Что мне нужно проверить в моей таблице, так это наличие строк для данного идентификатора пользователя и идентификатора заказа в два разных дня (поле DATETIME для отметки времени).

Я почти уверен, что мне нужна оговорка, и вот почему я здесь ... это ужасно пугает меня.

Ответы [ 2 ]

2 голосов
/ 04 февраля 2010

Наличие не должно вас пугать, это просто "Где" в агрегированном поле:

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

Это даст вам всех пользователей, у которых есть несколько заказов.

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

даст вам счетчик, если в @UserID есть несколько записей для идентификатора пользователя, и ноль, если нет.

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

вернет 1, если есть несколько записей для пользователя, 0, если нет.

Обновление: Не понимал, что вы можете иметь несколько заказов в день. Этот запрос будет делать то, что вы хотите:

With DistinctDates as (Select Distinct UserID, [DATE] From OrderTbl Where (UserID=@UserID))
Select UserID, Count(*) From DistinctDates  
Group By UserID Having Count(*) > 1 
0 голосов
/ 04 февраля 2010

Я не уверен, что понял ваш вопрос, но это может сработать для вас. HAVING - ваш друг, и вы все еще можете использовать предложение WHERE. Это должно дать вам знать, какой порядок и идентификатор пользователя встречаются в таблице более одного раза.

SELECT [UserId], [OrderId]
FROM OrderTable 
WHERE UserId = @UserId
AND OrderId = @OrderId
GROUP BY UserId, OrderId
HAVING Count(*) > 1
...