2011-03-28 49 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))