2011-03-28 60 views
0

我正在尝试编写一个查询,该查询将返回具有多个工单的任何客户,并且这些工单将在一周中的不同日子落下。每个客户的每个工作订单都应该在一周中的同一天进行,所以我想知道情况不是这样,所以我可以修复它。SQL分组问题

表的名称是Core.WorkOrder,它包含一个名为CustomerId的列,它指定每个工单所属的客户。有一个名为TimeWindowStart的列,可以用来查看每个工单的下一天(我使用DATENAME(工作日,TimeWindowStart)来做到这一点)。

任何想法如何写这个查询?我被困在这里。

谢谢!

回答

1
Select ... 
From WorkOrder As W 
Where Exists (
       Select 1 
       From WorkOrder As W1 
        And W1.CustomerId = W.CustomerId  
        And DatePart(dw, W1.TimeWindowStart) <> DatePart(dw, W.TimeWindowStart) 
       ) 
+0

谢谢托马斯,制定完美! – Joel 2011-03-28 15:50:30

1
SELECT * 
FROM (
     SELECT *, 
       COUNT(dp) OVER (PARTITION BY CustomerID) AS cnt 
     FROM (
       SELECT DISTINCT CustomerID, DATEPART(dw, TimeWindowStart) AS dp 
       FROM workOrder 
       ) q 
     ) q 
WHERE cnt >= 2 
+0

我给一个镜头,我只能运行一次我删除了“独特的”,一旦我做到了返回的所有客户提供多个工作订单,但并没有排除的客户,所有的工作订单都在一周的同一天。 – Joel 2011-03-28 15:42:53

+0

@Joel:当然,'DISTINCT'在分析功能中不起作用。请现在尝试。 – Quassnoi 2011-03-28 15:48:54

0
SELECT CustomerId, 
     MIN(DATENAME(weekday, TimeWindowStart)), 
     MAX(DATENAME(weekday, TimeWindowStart)) 
FROM Core.WorkOrder 
GROUP BY CustomerId 
HAVING MIN(DATENAME(weekday, TimeWindowStart)) != MAX(DATENAME(weekday, TimeWindowStart))