2013-10-04 2 views
0

그래프로 표시하기 위해 SQL Server 출하 시스템의 인시던트 이벤트 총 수를 연차로 누적하려고합니다.0 번 행을 표시합니다.

내가 지금 무엇을 가지고이 반환 무엇

SELECT EventType.Name AS [Incident Name], COUNT(Event.ID) AS [Occurrence] 
FROM Event 
INNER JOIN 
     PortEvent ON Event.PortEventID = PortEvent.ID 
INNER JOIN 
     EventType ON PortEvent.EventID = Event.ID 

WHERE Event.IsIncident = 1 and Event.Date BETWEEN (Start of Year & Now) 
GROUP BY Event.Name 

;

Incident Name  Occurrence 

Incident 1    1 
Incident 3    4 
Incident 4    7 

내가 원하는 것은 :

Incident Name  Occurrence 

Incident 1    1 
Incident 2    0 
Incident 3    4 
Incident 4    7 
Incident 5    0 

단순히이 할 수있는 방법이 있나요? 나는 SO에 대한 몇 가지 예를 보았지만 인접한 테이블에 대해서만 보았다.

감사합니다.

+2

망가 INNER JOIN을 사용하지만 LEFT OUTER JOIN은. –

답변

1

당신은 EventType ON PortEvent.EventID = Event.ID condition.The 쿼리 아래 문제를 해결해야한다에 문제가있는 이벤트 및 제로 또는 이벤트 유형의 이상을 반환합니다.

당신이 결과 사고에 포함 할 경우

SELECT ET.Name AS [Incident Name], COUNT(E.ID) AS [Occurrence] 
FROM EventType ET 
    LEFT JOIN PortEvent PE 
    ON ET.ID = PE.EventID 
    LEFT JOIN Event E 
    ON PE.EventID = E.ID 
     AND E.IsIncident = 1 
     AND E.Date BETWEEN ([Start of Year] AND Now) 
GROUP BY ET.Name 

업데이트는 당신이 시도 할 수 있습니다 :

ON PE.EventID = E.ID 
     AND E.Date BETWEEN ([Start of Year] AND Now) 
    WHERE E.IsIncident = 1 
GROUP BY ET.Name 
+0

다른 사람들보다 더 많은 성공을 거두었지만 이제는 IsIncident 비트 값에 관계없이 사건뿐만 아니라 모든 사건을 표시합니다. – Alex

+0

요구 사항에 따라 마지막 'ON' 절에서'WHERE' 절로 이동하는 쿼리를 조정할 수 있습니다. –

+0

감사합니다. 내 자신의 도움으로 결국 작동합니다. 고마워. – Alex

0

왼쪽 결합을 사용하기 만하면됩니다. 모든 이벤트 유형이 가장 왼쪽 레코드 세트에 있도록 쿼리를 재정렬해야합니다 (어쨌든 내가 시각화하는 방법입니다). 또한 where 절을 없애고이를 이벤트 테이블 조인에 추가해야합니다. 그렇지 않으면 내부 조인이 될 수 있기 때문입니다.

SELECT 
    EventType.Name AS [Incident Name], COUNT(Event.ID) AS [Occurrence] 
FROM EventType 
LEFT JOIN PortEvent ON Event.PortEventID = PortEvent.ID 
LEFT JOIN Event ON PortEvent.EventID = Event.ID and Event.IsIncident = 1 and Event.Date BETWEEN (Start of Year & Now) 
GROUP BY Event.Name 
+0

위와 동일한 결과로, IsIncident가 1로 설정된 이벤트뿐만 아니라 모든 이벤트가 표시됩니다. – Alex

+0

@Alex 자세한 정보를 제공해야합니다. SQL 피들을 설정하십시오 – UnhandledExcepSean

+0

고맙습니다. 당신의 의견과 나에 의한 시행 착오를 통해. 많이 감사합니다 – Alex

-1

AS [발생]는 왼쪽 INNER이 이벤트 유형의 가입

-1

변경 가입 (COUNT (Event.ID) = 0 THEN 0 ELSE 수 (Event.ID) END는 CASE). 이

SELECT EventType.Name AS [Incident Name], COUNT(Event.ID) AS [Occurrence] 
FROM Event 
LEFT JOIN 
     PortEvent ON Event.PortEventID = PortEvent.ID 
LEFT JOIN 
     EventType ON PortEvent.EventID = Event.ID 

WHERE Event.IsIncident = 1 and Event.Date BETWEEN (Start of Year & Now) 
GROUP BY Event.Name 
관련 문제