2014-11-12 4 views
0

SQL Server 2008 (또는 2012 년 사용 가능)을 사용하여 UserID, 날짜 및 작업 필드가있는 '활동'테이블이 있으며 각 사용자가 각 작업 동안 각 작업을 수행 한 횟수를 계산하려고합니다 일. 불행히도 '액션'은 텍스트 필드 일 뿐이며 때로는 기본적인 액션 이상을 포함합니다.SQL 쿼리에서 파생 된 필드

SELECT UserID, 
     Cast([Timestamp] AS DATE)       AS DateField, 
     Count(Action LIKE '%Logged In%')     AS LoggedIn, 
     Count(Action LIKE '%Requested Planning Data%') AS Planning, 
     Count(Action LIKE '%Requested Time Series Data%') AS TimeSeries, 
     Count(Action LIKE '%Requested Analytical Data%') AS Analytical 
FROM Activity 
ORDER BY UserID, 
      DateField 

결과는 다음과 비슷한 모습이 될 것입니다 : 그래서 이런 식 완

UserID DateField LoggedIn Planning TimeSeries Analytical 
------ --------- -------- -------- ---------- ---------- 
1  01-11-2014 1   1   0   2 
1  02-11-2014 3   7   2   5 
2  01-11-2014 1   8   0   0 
... 

하지만 난 어떻게 '수'열을 도출하는 아무 생각이 없습니다. 이것은 가능한가?

UserID Timestamp   Action 
1  01-11-2014 09:00:15 User Logged In 
1  01-11-2014 09:01:15 User Requested Planning Data for 2 sites 
1  01-11-2014 09:07:15 User Requested Analytical Data for 1 sites 
1  01-11-2014 09:25:15 User Requested Analytical Data for 8 sites 
1  02-11-2014 09:03:15 User Logged In 
1  02-11-2014 09:07:15 User Logged In 
... 

--- 알리스 테어

+0

문제가 이미 좋은 답변을 가지고 있지만 궁금한 점이 있습니까 ... '타임 스탬프'는 무엇입니까? – Andrew

+0

재미있는 팁 : 쿼리에서'SELECT @@ VERSION'을 실행하여 설치된 버전을 볼 수 있습니다. 서버의 버전 정보를 알려주는 단일 값 결과를 반환합니다. – AHiggins

+0

Andrew, Timestamp는 DateTime입니다. 나는 날짜별로 그룹화 할 수 있도록 시간 부분을 제거하기 위해 날짜로 캐스팅합니다. AHiggins, 팁 주셔서 감사합니다. – user41013

답변

2

conditional aggregate를 사용하는 데 필요한 : 원시 테이블은 다음과 같이 보인다. 이 시도.

SELECT UserID, CAST([Timestamp] AS date) AS DateField, 
    COUNT(CASE WHEN Action LIKE '%Logged In%' THEN 1 END) 
     AS LoggedIn, 
    COUNT(CASE WHEN Action LIKE '%Requested Planning Data%' THEN 1 END) 
     AS Planning, 
    COUNT(CASE WHEN Action LIKE '%Requested Time Series Data%' THEN 1 END) 
     AS TimeSeries, 
    COUNT(CASE WHEN Action LIKE '%Requested Analytical Data%' THEN 1 END) 
     AS Analytical 
FROM Activity 
ORDER BY UserID, CAST([Timestamp] AS date) 
+0

이 구문을 사용하면이 솔루션을 약간 단순화 할 수 있습니다. 'COUNT (예 : % Logged In %'THEN 1 END) AS LoggedIn' – Andrew

+0

@Andrew - 감사합니다. Simplified –

+0

신속한 답변을 주신 분께 감사드립니다. – user41013

관련 문제