2015-02-03 1 views
0

특정 필드 값마다 합계를 얻기 위해 테이블에 쿼리를 실행해야합니다.필드의 행과 특정 값으로 요약하는 방법

rechargedate originid 
------------------------ 
2015-02-02  3 
2015-02-02  3 
2015-02-02  1 
2015-02-02  1 
2015-02-02  3 
2015-02-02  2 
2015-02-01  2 
2015-02-01  3 
2015-02-01  1 
2015-02-01  1 
2015-02-01  2 


그리고 쿼리 결과는 같아야합니다

rechargedate orig1 orig2 orig3 
------------------------------------- 
2015-02-02  2  1  3 
2015-02-01  2  2  1 

가 어떻게 MS SQL 2008 것을 달성 할 수 있는가?

+1

PIVIOT 내용을 확인? –

답변

1

조건부 집계 사용할 수 있습니다

CREATE TABLE #temp(
    RechargeDate DATE, 
    OriginID  INT 
) 
INSERT INTO #temp VALUES 
('2015-02-02', 3),('2015-02-02', 3),('2015-02-02', 1), 
('2015-02-02', 1),('2015-02-02', 3),('2015-02-02', 2), 
('2015-02-01', 2),('2015-02-01', 3),('2015-02-01', 1), 
('2015-02-01', 1),('2015-02-01', 2); 

SELECT 
    RechargeDate, 
    orig1 = SUM(CASE WHEN OriginID = 1 THEN 1 ELSE 0 END), 
    orig2 = SUM(CASE WHEN OriginID = 2 THEN 1 ELSE 0 END), 
    orig3 = SUM(CASE WHEN OriginID = 3 THEN 1 ELSE 0 END) 
FROM #temp 
GROUP BY RechargeDate 
ORDER BY RechargeDate DESC 

DROP TABLE #temp 

결과를

RechargeDate orig1  orig2  orig3 
------------ ----------- ----------- ----------- 
2015-02-02 2   1   3 
2015-02-01 2   2   1 
+0

대단하군요! 정확히 내가 뭘 찾고 있었고, 그렇게 단순한가. 고맙습니다! – pbertuzzi

1

가장 간단한 방법은 예를 들면, CASE 문으로 당신이 원하는 열을 만든 다음 합계를 수행하는 것입니다,

SELECT rechargedate, 
    SUM(CASE WHEN originid = 1 THEN 1 ELSE 0 END) AS orig1, 
    SUM(CASE WHEN originid = 2 THEN 1 ELSE 0 END) AS orig2, 
    SUM(CASE WHEN originid = 3 THEN 1 ELSE 0 END) AS orig3 
FROM {your_table} 
GROUP BY rechargedate 
ORDER BY rechargedate DESC 
+0

감사합니다 evanv, 그것은 가깝지만 정확히는 아닙니다. 그것은 또한 나의 해결책이었습니다. 결과 집합에 몇 가지 0이 생깁니다. – pbertuzzi

4

사용 PIVOT . this이 툿 지금까지 시도 무엇 SQL SERVER.

SELECT rechargedate, 
     [1] AS orig1, 
     [2] AS orig2, 
     [3] AS orig3 
FROM #TEST 
PIVOT(COUNT(originid) FOR originid IN([1],[2],[3])) AS Piv 
ORDER BY rechargedate DESC 
+0

Kumar, Wewe 솔루션을 시도해 보았습니다. Wewe 솔루션은 제가 시도한 것과 비슷하고 매력적이었습니다. 시간 내 주셔서 감사합니다. – pbertuzzi

관련 문제