SQL Group By/Count:跨多列计算相同的值?

Dav*_*ino 1 sql t-sql group-by count sql-server-2008

我正在试图弄清楚如何编写一个计算跨多个列的值的查询,结果表在每列中都有一个计数,用于任何列的每个可能值.

示例:说我有mytable

Source data table:

P1  P2  P3
-----------
a   b   a
a   a   a
b   b   b
a   b   b
Run Code Online (Sandbox Code Playgroud)

我想要一个计算每列中的a和b的查询,产生类似于:

Desired query output:

     P1  P2  P3
   -------------
a |  3   1   2
b |  1   3   2
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过以下方式轻松地为单个列执行此操作:

select P1, count(*) as mycounts
from mytable
group by P1
Run Code Online (Sandbox Code Playgroud)

但是列可以做到这一点吗?

我正在使用SQL Server 2008(T-SQL).在此先感谢您的帮助!

Ari*_*ion 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'
Run Code Online (Sandbox Code Playgroud)

然后像这样的一个支点:

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
Run Code Online (Sandbox Code Playgroud)

以下是有关pivot和unpivot的更多信息