2010-02-04 29 views
0

我需要在我的表上測試的是如果在兩個單獨的日期中存在給定用戶標識和訂單標識的行(DATETIME字段爲時間戳) 。SPROC T-SQL如果行在多天存在,則返回結果

我很確定我需要一個條款,這就是爲什麼我在這裏......這讓我非常害怕。

回答

2

不應該嚇到你,它僅僅是一個「去哪兒」上聚集的領域:

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

這會給你有多個訂單的所有用戶。

Select UserID, Count(*) From OrderTbl Where ([email protected]) Group By UserID Having Count(*) > 1 

如果在@UserID中有多個用戶ID記錄,則會給你計數,如果不是,則返回null。

if exists (Select UserID, Count(*) From OrderTbl Where ([email protected]) Group By UserID 
      Having Count(*) > 1) Select 1 else Select 0 

如果用戶有多個記錄,則返回1,否則返回0。

更新:沒有意識到你可以每天有多個訂單。這個查詢將做你想要的:

With DistinctDates as (Select Distinct UserID, [DATE] From OrderTbl Where ([email protected])) 
Select UserID, Count(*) From DistinctDates 
Group By UserID Having Count(*) > 1 
+0

這是一個好的開始,但我需要測試他們是否有訂單放在不同的日子。換句話說,如果他們在2/4/2010有15個訂單,它應該仍然返回0.如果他們在2010年2/3/2010有1個訂單,並且2/4/2010有15個訂單,它應該返回一個1. – Kyle 2010-02-04 18:34:14

+0

我試着按照我的日期戳字段進行分組,認爲這會讓我在那裏,但沒有骰子......任何想法? – Kyle 2010-02-04 18:43:30

+0

修好了,凱爾,我回來看到你的筆記。對不起,第一次沒有讀更多的小心! – 2010-02-04 18:49:12

0

我不知道我是否理解你的問題,但這可能適用於你。 HAVING是你的朋友,你仍然可以使用WHERE子句。這應該讓你知道在表格中多次發生什麼命令和用戶ID組合。

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

此外,這些記錄需要在不同的日子...... – Kyle 2010-02-04 18:38:20

+0

我修正了錯字(我的錯),但......原始問題並不清楚。它讀取「如果在兩個不同的日子裏有給定的[用戶ID和訂單ID]的行」。這個查詢會給他一個開始,然後找到那些不同的日子。在架構或將填充表格的數據類型上沒有給出具體細節。他沒有具體說明他是否知道他正在查找的OrderId或UserID(抱歉,我做了一個假設),或者即使在一天內可能有多個訂單。 – AGoodDisplayName 2010-02-04 19:12:21

+0

不必道歉。我摘下了讚揚票並清除了上面的評論。當他們只是想幫助我時,我討厭低調投票,所以我很樂意改變投票。 – 2010-02-04 21:18:48