2016-11-16 3 views
-1

Aus irgendeinem Grund wird die Datenbedingung in der Where-Klausel ignoriert - irgendwelche Vorschläge?SQL Server - Where-Klausel-Bedingung wird ignoriert

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

Das ist eine chaotische Abfrage. Hast du das versucht? 'where (c.calls> 0 oder S.sales> 0) und d.Year = '2016'' –

+0

Zuerst würde mich deine Definition von chaotisch interessieren? Ich bin ziemlich neu dazu - wenn es Verbesserungen gibt, die ich machen kann, würde ich sicherlich gerne etwas über sie erfahren ... – user3067478

+1

Ich meinte es sieht kompliziert aus. Abgesehen davon, ohne die Datenstrukturen zu zeigen und Beispieleingabe und erwartete Ausgabe zu liefern, ist es schwierig, Fehler zu beheben. –

Antwort

1

Dies ist nicht wirklich eine Antwort, sondern ein Beispiel dafür, wie Sie diese Abfrage formatieren können, damit Sie sie leichter lesen können. Ich habe auch Ihre Wo-Prädikate geändert, um das zu berücksichtigen, was fast sicher das Problem ist.

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

Hinzufügen der Klammern gearbeitet - Ich habe es versucht. Ich entschied mich dafür, sie zu belassen, da die Zeit bis zur Fertigstellung für die Abfrage wesentlich länger war. – user3067478

+2

Es könnte länger dauern, aber ohne die Klammer ist die Logik der Abfrage völlig anders. –