小编典典

SQL分组依据/计数:跨多个列计数相同的值吗?

sql

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

示例:说我有 mytable

Source data table:

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

我想要一个查询,在每列中计算a和b,产生类似以下内容的结果:

Desired query output:

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

我知道我可以通过 group by 轻松地对单个列执行此操作:

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

但是是否可以对 每一 列都执行此操作?

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


阅读 261

收藏
2021-04-14

共1个答案

小编典典

也许是这样的:

首先是一些测试数据:

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

是有关枢轴和非枢轴的更多信息

2021-04-14