2012-02-07 6 views
1

열의 가능한 모든 값에 대해 각 열에 개수가있는 여러 열에 걸쳐 값을 계산하는 쿼리를 작성하는 방법을 알아 내려고합니다.SQL Group By/Count : 여러 열에 동일한 값 계산?

예 : 내가 MYTABLE 이 말 내가 좋아하는 뭔가를 생산, 각 열에서의 및 B의 수를 계산하는 쿼리 원하는

Source data table: 

P1 P2 P3 
----------- 
a b a 
a a a 
b b b 
a b b 

: 나는이 작업을 수행 할 수 있습니다 알고

Desired query output: 

    P1 P2 P3 
    ------------- 
a | 3 1 2 
b | 1 3 2 

을 하나의 열은 쉽게 그룹으로 :

select P1, count(*) as mycounts 
from mytable 
group by P1 

마다 열에 대해이 작업을 수행 할 수 있습니까?

SQL Server 2008 (T-SQL)을 사용하고 있습니다. 어떤 도움을 주셔서 미리 감사드립니다!

답변

5

아마 이런 식으로 뭔가 :

우선 몇 가지 테스트 데이터 : 피벗과 같은 그런

DECLARE @tbl TABLE(P1 VARCHAR,P2 VARCHAR,P3 VARCHAR) 

INSERT INTO @tbl 
SELECT 'a','b','a' UNION ALL 
SELECT 'a','a','a' UNION ALL 
SELECT 'b','b','b' UNION ALL 
SELECT 'a','b','b' 

:

SELECT 
    * 
FROM 
(
    SELECT 'P1' AS P, P1 AS PValue,P1 AS test FROM @tbl 
    UNION ALL 
    SELECT 'P2',P2,P2 FROM @tbl 
    UNION ALL 
    SELECT 'P3',P3,P3 FROM @tbl 
) AS p 
PIVOT 
(
    COUNT(PValue) 
    FOR P IN ([P1],[P2],[P3]) 
) AS pvt 

Here가 피벗 및

UNPIVOT에 대한 자세한 정보입니다
+0

고마워, 아리온! 이것은 아름답다! 이제 구문을 연구하고 이러한 기능의 배움을 배웁니다. D –

+0

그러면 대답을 수락하는 것이 좋습니다. 도와 줘서 기뻐 :). .. 나는 피봇에 대한 msdn 페이지에 대한 답변에 비슷한 것을 추가했습니다. – Arion

+1

그리고 이제는 대답을 수락하는 법을 배웠습니다. 오, 인터넷 교육학, 내가 너를 얼마나 좋아하는지. –

0

아마도 가장 효율적인 것은 아니지만이 방법이 효과적 일 수 있습니다.

;WITH data 
AS 
(
    SELECT 'a' AS p1, 'b' AS p2, 'a' AS p3 
    UNION ALL 
    SELECT 'a', 'a','a' 
    UNION ALL 
    SELECT 'b','b','b' 
    UNION ALL 
    SELECT 'a','b','b' 
) 
SELECT 
    p_one.value AS header, 
    p1, 
    p2, 
    p3 
FROM (SELECT 
      p1 AS value, 
      count(*) AS p1 
     FROM data d 
     GROUP BY p1) p_one 
left JOIN (SELECT 
      p2 AS value, 
      count(*) AS p2 
      FROM data d 
      GROUP BY p2) p_two 
    ON p_two.value = p_one.value 
left JOIN (SELECT 
      p3 AS value, 
      count(*) AS p3 
      FROM data d 
      GROUP BY p3) p_three 
    ON p_two.value = p_three.value 
+0

cte는 좋지만 다음 쿼리를 pivot 문으로 만듭니다. –

+0

왼쪽 가입은 여기서도 작동하지 않습니다. 즉. p1을 "a"로만 쓰면 p2와 p3의 "b"가 무시됩니다. –

관련 문제