2011-05-06 2 views
1

다른 표를 결합하고 계산을 할 때 자체적으로 표에 가입해야합니다. 나는 SQL Server 2008 R2를 사용하고 있습니다.십자가에 십자가에 합계하여 표에 합치기

현재 상태 - 3 개의 테이블 MergedSessionsID, EventsSeparated 및 EventsDescriptions이 있습니다.

MergedSessionsID, 여기는 데이터를 조작하는 곳입니다. 본질적으로 회사 이름과 세션 시간 (데이터의 예는 아래 참조)을 지정함으로써 세션입니다.

이벤트 분류 된 테이블은 MergedSessionsID와 연결됩니다. 기본적으로 세션에는 하나 이상의 이벤트가있을 수 있습니다.

EventsDescription 테이블에는 이벤트에 대한 설명이 들어 있습니다. 이것과 그것은 사용자에게 일어난다.

여기 내 목표는 일정 기간 동안 발생한 총 이벤트 수를 이해하는 것입니다. Exhibit 1은 아래 쿼리를 실행 한 결과입니다.

그러나 나는 또한 을 비교하여 이전 데이터와 새 데이터를 비교하고 이벤트 수가 어떻게 변경되었는지 확인하십시오. 따라서 Exhibit 2에서와 같이 2210 년 3 월의 데이터에 대한 PreCounter와 2210 년 4 월의 데이터에 대한 PostCounter를 보여주는 것이 상상합니다.

이것을 구현하는 가장 좋은 방법은 무엇입니까?

SELECT E.[Event] 
     ,COUNT(1) AS Counter 
     ,ED.[Event Description] 
FROM [ShipCompanies].[dbo].MergedSessionsID AS S 
    INNER JOIN [ShipCompanies].dbo.EventsSeparated AS E 
     ON S.ID = E.ID 
    INNER JOIN [ShipCompanies].dbo.EventDescription AS ED 
     ON E.[Event] = ED.[Unique ID] 
WHERE S.Company = 'SuperSpaceShipOne' 
    AND S.[Session Time] BETWEEN '2210-03-02' AND '2210-03-05' 
GROUP BY E.[Event], ED.[Event Description] 
ORDER BY E.[Event] 


SELECT * FROM MergedSessionsID 
ID Company    Session Time 
1 SuperSpaceShipOne 2210-03-05 
2 SuperSpaceShipOne 2210-03-03 
3 SuperSpaceShipOne 2210-03-02 
4 SuperSpaceShipOne 2210-04-01 
5 SuperSpaceShipOne 2210-04-02 
6 SuperSpaceShipOne 2210-04-03 


SELECT * FROM EventsSeparated 
ID Event 
1 2000 
2 2001 
2 2002 
3 2001 
4 2002 
5 2002 
6 2002 

SELECT * FROM EventDescription 
Unique ID Event Description 
2000  'User Entered the Pod' 
2001  'User Initiated Launching Sequence' 
2002  'User Error encountered' 

전시 1. 병합 된 출력 요약 표 (내가 지금 무엇을 가지고)

Event Counter Event Description 
2000 1  'User Entered the Pod' 
2001 2  'User Initiated Launching Sequence' 
2002 1  'User Error encountered' 

전시 2. 병합 된 출력 요약 표 (I가 얻고 싶은 무엇)

Event PreCounter Event Description     PostCounter 
2000 1   'User Entered the Pod'    0 
2001 2   'User Initiated Launching Sequence' 0 
2002 1   'User Error encountered'   3 
+0

병합 된 세션 데이터 값이 '2210-04-10'이라고 가정합니다. 그것은 계산되어야 할 것인가? 즉, 게시자 기간은 어떻게 결정되어야합니까? 종료일 한 달 후 (예 :'2210-04-05')? – Thomas

+0

나는 게시물 카운터 날짜를 지정할 것입니다. 프리 카운터는 현재 2210-03-02와 2210-03-05 사이의 범위입니다. 마찬가지로 포스트 카운터는 2210-04-02와 2210-04-05의 범위가됩니다. – firedrawndagger

+0

Ok. 두 날짜 범위를 모두 넘기면 문제가 더 쉽습니다. – Thomas

답변

1
Select E.[Event] 
    , Sum(Case 
      When S.[Session Time] Between '2210-03-02' And '2210-03-05' Then 1 
      Else 0 End) As PreCounter 
    , Sum(Case 
      When S.[Session Time] Between '2210-04-02' And '2210-04-05' Then 1 
      Else 0 End) As PostCounter 
     , ED.[Event Description] 
From [ShipCompanies].[dbo].MergedSessionsID As S 
    Join [ShipCompanies].dbo.EventsSeparated As E 
     On S.ID = E.ID 
    Join [ShipCompanies].dbo.EventDescription As ED 
     On E.[Event] = ED.[Unique ID] 
Where S.Company = 'SuperSpaceShipOne' 
    And (
     S.[Session Time] Between '2210-03-02' And '2210-03-05' 
     Or S.[Session Time] Between '2210-04-02' And '2210-04-05' 
     ) 
Group By E.[Event], ED.[Event Description] 
Order By E.[Event]