2013-10-16 2 views
0

내가 원하는 것을 알고 있지만 최선의 방법을 찾기 위해 고심하고 있습니다.쿼리 결과 병합

SELECT 
[Description] As [Name], month([OccuredOn]) as [Month], year([OccuredOn]) AS [Year],  COUNT([id]) AS Cnt 
FROM MyTable 
GROUP BY [Description], Year([OccuredOn]), Month([OccuredOn]) 
ORDER BY [Description],Year([OccuredOn]), month([OccuredOn]) 

문제는 내가 하나에 결과의 일부를 병합 할 필요가있다 :

나는 나에게 일부 데이터를 반환하는 쿼리가 있습니다.

다음은 원하는 작업이지만 string1과 string2의 레코드를 string3의 단일 레코드로 병합 할 수 있어야합니다. 나는 위의 알

SELECT 
CASE [Description] 
    WHEN 'String1' THEN 'String3' 
    WHEN 'String2' THEN 'String3' 
    ELSE [Description] 
END As [Name], 
month([OccuredOn]) as [Month], year([OccuredOn]) AS [Year], COUNT([id]) AS Cnt 
FROM MyTable 
GROUP BY [Description], Year([OccuredOn]), Month([OccuredOn]) 
ORDER BY [Description],Year([OccuredOn]), month([OccuredOn]) 

그것을 할 수있는 방법은 아니지만 기대했다 누군가가 내 결과를 반환 할 수있는 방법을 지적 할 수있는 곳 날짜에 대해 하나의 고유 한 행으로 문자열 1 또는 문자열 2 리턴 어떤 설명 누적 된 수.

위의 SQL은 분명히 문자열 1과 문자열 2에 대한

감사

+0

그룹 대신 [[설명]]을 (를)'[이름]'(으)로 시도 했습니까? – PlantTheIdea

+0

나는 GROUP BY 대신에 DISTINCT를 체크 아웃해야한다고 생각한다. – rheitzman

답변

1

당신은 당신의 casegroup byorder by 조항

이 작업을 수행 할 수
SELECT 
CASE [Description] 
    WHEN 'String1' THEN 'String3' 
    WHEN 'String2' THEN 'String3' 
    ELSE [Description] 
END As [Name], 
month([OccuredOn]) as [Month], year([OccuredOn]) AS [Year], COUNT([id]) AS Cnt 
FROM MyTable 
GROUP BY CASE [Description] 
    WHEN 'String1' THEN 'String3' 
    WHEN 'String2' THEN 'String3' 
    ELSE [Description] 
END, Year([OccuredOn]), Month([OccuredOn]) 
ORDER BY CASE [Description] 
    WHEN 'String1' THEN 'String3' 
    WHEN 'String2' THEN 'String3' 
    ELSE [Description] 
END,Year([OccuredOn]), month([OccuredOn]) 
+0

완벽! 그게 바로 내가 한 일이야. 고마워. – JIbber4568

+0

나는 그의 테이블이 그렇게 크지 않기를 정말로 바란다. 그룹 및 주문의 사례 명세서는 매우 부적절합니다. – PlantTheIdea

+0

@PlantTheIdea : 더 좋은 방법이 있습니까? – geomagas

0

에 전파 할 수있는이 두 개의 데이터를 많이 반환?

SELECT * 
FROM (SELECT 
     CASE [Description] 
     WHEN 'String1' THEN 'String3' 
     ELSE [Description] 
     END As [Name], 
     month([OccuredOn]) as [Month], year([OccuredOn]) AS [Year], COUNT([id]) AS Cnt 
     FROM MyTable 
     UNION 
     SELECT 
     CASE [Description] 
     WHEN 'String2' THEN 'String3' 
     ELSE [Description] 
     END As [Name], 
     month([OccuredOn]) as [Month], year([OccuredOn]) AS [Year], COUNT([id]) AS Cnt 
     FROM MyTable) 
GROUP BY [Description], Year([OccuredOn]), Month([OccuredOn]) 
ORDER BY [Description],Year([OccuredOn]), month([OccuredOn]) 
+0

이 방향으로 가면 'UNION'보다는 'UNION ALL'을 사용하는 것이 좋습니다. 그룹화가 유일성을 처리하므로 'UNION'을 통해 유효성을 검사 할 필요가 없습니다. – PlantTheIdea