2014-01-29 2 views
0

날짜 범위를 선택하고 몇 가지 정보를 얻을 수있는 보고서를 얻으려고합니다. 내 표는 내가SQL 날짜 범위가 열이고 그룹 수입니다.

-------------------------------------- 
AgentID|05/09/2012|06/09/2012 
-------------------------------------- 
0| 2  | 0 
00124 | 1  | 1 
00125 | 0  | 1 

내가 가진 코드 같은 것을

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX), 
    @INIDate as date, 
    @ENDDate as date, 
    @INIDateVAR nvarchar(50), 
    @ENDDateVAR nvarchar(50) 

Set @INIDate = '10-01-2014' 
Set @ENDDate = '10-10-2014' 


DECLARE @sql NVARCHAR(MAX) = N'SELECT agentID'; 

;WITH dr AS 
(

    SELECT MinDate = @INIDate, 
     MaxDate = @ENDDate 
), 
n AS 
(
    SELECT TOP (DATEDIFF(DAY, (SELECT MinDate FROM dr), (SELECT MaxDate FROM dr)) + 1) 
    d = DATEADD(DAY, ROW_NUMBER() OVER (ORDER BY [object_id])-1, 
    (SELECT MinDate FROM dr)) 
FROM sys.all_objects 
) 
SELECT @sql += ', 
    (Select Count(*) From AllRecordsView) as ' + QUOTENAME(d) 
    FROM n; 

SELECT @sql += ' FROM dbo.AllRecordsView Group by AgentID;' 

EXEC sp_executesql @sql; 
GO 

이다 싶어이

-------------------------------------- 
RecID|AgentID|date 
-------------------------------------- 
1 |0| 05/09/2012 16:28:49 
2 |0| 05/09/2012 17:28:49 
3 |00124 | 05/09/2012 18:28:49 
4 |00124 | 06/09/2012 19:28:49 
5 |00125 | 06/09/2012 20:28:49 

같은 것입니다하지만 큰 기간을 선택할 때이 매우 느리게 도착 물론 내가 얻은 결과는 완전한 테이블의 수입니다.

아이디어가 있으십니까? 감사합니다

답변

0

나는 Reporting Services를 사용하고 결국 무엇인가. 그렇게하면 열의 모든 값을 각 행마다 하나씩 열로 할당 할 수 있습니다.

0

날짜 필드에서 요일을 추출하여 GROUP BY에서 사용하려면 day() 함수 (데이터베이스에 따라 다름)를 사용할 수 있습니다. 범위는 SQL BETWEEN을 사용하십시오.

성능 문제가 계속 발생하면 AgentID 및 날짜 열에 인덱스를 만들어야합니다.

SELECT dateColumn, AgentID, count(AgentID) AS agentCount
FROM YourTable
WHERE dateColumn BETWEEN '2012-09-05' AND '2012-09-09'
GROUP BY day(dateColumn), AgentID
ORDER BY dateColumn;

+0

안녕하세요. 답변 해 주셔서 감사합니다. 예. 날짜와 요원으로 그룹화되었지만 예상되는 형식으로 그룹화되지 않았습니다. 날짜를 열로 지정하고 싶습니다. 따라서 날짜와 해당 기간의 모든 날짜 사이를 열로 선택하십시오. – gianfrancopintus