2011-03-28 2 views
0

여러 작업 주문을 가진 고객에게 다른 요일에 해당하는 작업 주문을 반환하는 쿼리를 작성하려고합니다. 각 고객을위한 모든 작업 지시서는 같은 요일에 떨어질 것입니다. 그래서 이것이 어디서 발생하지 않았는지 알고 싶어서 고칠 수 있습니다.SQL 그룹화 문제

테이블 이름은 Core.WorkOrder이며 각 작업 지시가 속한 고객을 지정하는 CustomerId 열이 있습니다. TimeWindowStart라는 열이 있는데,이 열을 사용하여 각 작업 순서가 어느 날에 해당하는지 확인할 수 있습니다 (예 : DATENAME (weekday, 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

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

본인은 "DISTINCT"을 삭제하면 슛, 나는 단지 그것을 실행할 수 있다는 것을 포기하고 내가 한 일단 여러 작업 지시와 함께 모든 고객을 반환하지만 고객을 배제하지 않았다 같은 작업 요일에 모든 작업 명령이 내려졌습니다. – Joel

+0

@Joel : 확실히, 'DISTINCT'는 분석 함수에서 작동하지 않습니다. 지금 시도하십시오. – Quassnoi

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))