首页 > 解决方案 > 如何选择多列的计数

问题描述

我有这个观点

-----------------------------------
ID    1stChoice  2Choice  3rdChoice
-----------------------------------
1  -  AA       -   BB    -   CC
2  -  CC       -   BB    -   AA
3  -  AA       -   CC    -   BB
4  -  BB       -   AA    -   CC
5  -  AA       -   CC    -   BB

我需要显示一个字段被选择多少次的报告1stChoice,2ndChoice and 3rdChoice

我尝试了这个非常适用于单列的查询

select 1stChoice,COUNT(*) as 'Count' from myView group by 1stChoice;

1stChoice - Count
-----------------
AA        -   3       
BB        -   1       
CC        -   1       

但这就是我希望输出的样子

------------------------------------
Field -1stChoice  2Choice  3rdChoice
------------------------------------
AA    -  3       -   1    -   1
BB    -  1       -   2    -   2
CC    -  1       -   2    -   2

select 1stChoice,COUNT(*) as 'Count' from myView group by 1stChoice;有没有一种方法可以在不为视图中的每一列 编写的情况下实现这一点?
我已经看到在一个 sql 命令访问和其他命令中从一个数据库表中选择多个计数, 但它们都没有解决我的问题。

标签: c#sqlsql-server

解决方案


使用枢轴的示例;

SELECT [ChosenValue], [pvt].[1stChoice], pvt.[2ndChoice], pvt.[3rdChoice]
FROM (
    SELECT Id, '1stChoice' Choice, [1stChoice] [ChosenValue]
    FROM MyView
    UNION
    SELECT Id, '2ndChoice' Choice, [2ndChoice]
    FROM MyView
    UNION
    SELECT Id, '3rdChoice' Choice, [3rdChoice]
    FROM MyView
) AS tbl
PIVOT (
    COUNT(Id)
    FOR Choice IN ([1stChoice], [2ndChoice], [3rdChoice])
) as pvt

结果;

ChosenValue 1stChoice   2ndChoice   3rdChoice
AA          3           1           1
BB          1           2           2
CC          1           2           2

推荐阅读