2012-04-30 5 views
1

특정 그룹의 사용자별로 데이터를 정렬하려고합니다. 지금까지이SQL Server에서 쿼리 도움말 그룹화

Origional_Date ID  FORM Total 
2012-03-01  1855 3  1283 
2012-03-01  2869 4  2306 
2012-03-01  5555 4  6440 
2012-03-01  5555 3  8373 
2012-03-01  2527 3  8476 
2012-03-01  922  3  823 
2012-03-15  2907 4  1420 
2012-03-15  5555 3  2892 
2012-03-15  2914 4  5008 
2012-03-15  2375 3  4594 

쿼리입니다 :

는 웹 ID
Origional_Date ID  FORM Total 
2012-03-01  Web  3  8373 
2012-03-01  Direct 3  10582 
2012-03-01  Web  4  6440 
2012-03-01  Direct 4  2306 
2012-03-15  WEB  3  2892 
2012-03-15  Direct 3  4594 
2012-03-15  Direct 4  6428 

인 경우 :

DECLARE @StartDate smalldatetime, @EndDate smalldatetime, @Web_ID as smallint 
    SET @StartDate = '20120301' 
    SET @EndDate = '20120331' 
    SET @Web_ID = '5555' 

SELECT DATEADD(WEEK, DATEDIFF(WEEK, 0, [Origional_Date]), -1) as [Origional_Date] 
    ,[ID] 
    ,[Form] 
    ,SUM([Total]) as [Total] 
    FROM mytable 
    WHERE [Origional_Date] between @StartDate and @EndDate 
    AND [ID] = @Web_ID 
    GROUP BY DATEADD(WEEK, DATEDIFF(WEEK, 0, [Origional_Date]), -1), [ID], [Form] 
    ORDER BY [Origional_Date], [Form] ASC 

는 내가 뭘하려고 오전처럼 내 데이터를 표시처럼 내 데이터는 보이는 5555 및 Direct는 다른 것입니다.

난 그냥 확실하지 않다 방법이 함께 할 수있는 경우는 "그룹화"를에서 수행해야하는 경우 문 "IF"또는

감사합니다!

+0

필터는 선택 당 하나 개의 ID를 반환합니다. 맞다? – Jones

답변

1

같은

이의 유사합니다 : ID의

select case [ID] 
    when 5555 then 'Web' 
    else 'Direct' 
    end as [ID] 
from mytable 
1

case 문을 사용하여이를 수행 할 수 있습니다. 귀하의 경우 케이스 clausule

select case active 
    when 1 then 'Active' 
    when 0 then 'Inactive' 
    end   
from contract 

를 사용

SELECT DATEADD(WEEK, DATEDIFF(WEEK, 0, [Origional_Date]), -1) as [Origional_Date] 
    ,(CASE WHEN [ID] = 5555 THEN 'Web' ELSE 'Direct' END) 
    ,[Form] 
    ,SUM([Total]) as [Total] 
    FROM mytable 
    WHERE [Origional_Date] between @StartDate and @EndDate 
    AND [ID] = @Web_ID 
    GROUP BY DATEADD(WEEK, DATEDIFF(WEEK, 0, [Origional_Date]), -1), (CASE WHEN [ID] = 5555 THEN 'Web' ELSE 'Direct' END), [Form] 
    ORDER BY [Origional_Date], [Form] ASC