2016-11-16 6 views
-1

어떤 이유로 where 절의 데이터 조건이 무시됩니다.SQL Server - where 절 조건이 무시됩니다.

SELECT D.[Date], 
     D.Year, 
     D.MonthName, 
     D.WeekOfYear, 
     E.bu_name, 
     E.emp_mgr, 
     E.emp_sup, 
     E.emp_name, 
     E.emp_jde, 
     C.calls, 
     s.sales 
FROM DateTable AS D 
     CROSS JOIN EmployeeTable AS E 
     LEFT JOIN (SELECT CAST([start_date] AS DATE) AS call_date, 
          [agent_no] AS agent_id, 
          SUM(CASE WHEN [skill_name] LIKE '5700 Sales l%' 
              AND [Agent_Time] != '0' THEN 1 
            ELSE 0 
           END) AS calls 
        FROM  CallTable 
        GROUP BY CAST([start_date] AS DATE), 
          [agent_no] 
       ) AS C ON D.[Date] = C.call_date 
          AND E.emp_vcc = C.agent_id 
     LEFT JOIN (SELECT [AC#DTE_dt] AS sale_date, 
          [EMPJDENUM] AS emp_jde, 
          SUM(CASE WHEN [CHANNEL] = 'I' 
              AND ([ICGCD2] = 'L' 
               OR [ICGCD2] = 'H') 
              AND [ITMQTY] > 3 
              AND [EMPBUNCOD] IN ('5044','5077') THEN 1 
            ELSE 0 
           END) AS sales 
        FROM  SalesTable 
        GROUP BY [AC#DTE_dt], 
          [EMPJDENUM] 
       ) AS S ON D.Date = s.sale_date 
          AND E.emp_jde = S.emp_jde 
WHERE c.calls > 0 
     OR S.sales > 0 
     AND d.Year = '2016' 
+0

이는 지저분한 검색어입니다. 이러는 것을 시도 했습니까? 'where (c.calls> 0 or S.sales> 0) 그리고 d.Year = '2016'' –

+0

글쎄, 처음에는 지저분한 정의에 관심이 있습니까? 나는 이것에 상당히 새롭다 - 나가 할 수있는 개선이있는 경우에 나는 확실히 그 (것)들에 관하여 배우는 것을 싶을 ... – user3067478

+1

나는 복잡한 그것을 의미했다. 게다가 데이터 구조를 보여주지 않고 샘플 입력과 예상 출력을 제공하지 않아도 문제를 해결하기가 어렵습니다. –

답변

1

이것은 실제로 대답이 아니며 더 쉽게 읽을 수 있도록이 쿼리의 형식을 지정하는 방법의 예입니다. 거의 확실하게 문제가되는 부분을 수용 할 수 있도록 술어를 수정했습니다.

SELECT D.[Date] 
    , D.Year 
    , D.MonthName 
    , D.WeekOfYear 
    , E.bu_name 
    , E.emp_mgr 
    , E.emp_sup 
    , E.emp_name 
    , E.emp_jde 
    , C.calls 
    , s.sales 
FROM [Date Table] AS D 
CROSS JOIN [Employee TABLE] AS E 
LEFT JOIN 
(
    SELECT Cast([start_date] AS DATE) AS call_date 
     , [agent_no] AS agent_id 
     , Sum(CASE WHEN [skill_name] LIKE '5700 Sales l%' AND [Agent_Time] != '0' THEN 1 ELSE 0 END) AS calls 
    FROM [Call TABLE] 
    GROUP BY Cast([start_date] AS DATE), [agent_no] 
) AS C ON D.[Date] = C.call_date 
     AND E.emp_vcc = C.agent_id 
LEFT JOIN 
(
    SELECT [AC#DTE_dt] AS sale_date 
     , [EMPJDENUM] AS emp_jde 
     , Sum(CASE WHEN [CHANNEL] = 'I' AND [ICGCD2] IN ('L', 'H') AND [ITMQTY] > 3 AND [EMPBUNCOD] IN ('5044', '5077') THEN 1 ELSE 0 END) AS sales 
    FROM [Sales TABLE] 
    GROUP BY [AC#DTE_dt], [EMPJDENUM] 
) AS S ON D.Date = s.sale_date 
    AND E.emp_jde = S.emp_jde 
WHERE 
(
    c.calls > 0 
    OR 
    S.sales > 0 
) 
AND d.Year = '2016'; 
+0

괄호를 추가하면 효과가 있습니다. 나는 그것들을 사용할 때 그것들을 사용할 때 질의 완료 시간이 상당히 길어 졌기 때문에 – user3067478

+2

더 오랜 시간이 걸릴 수 있지만 괄호가 없으면 질의 논리는 완전히 다르다. –