2010-02-04 30 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