c# - 如何选择多列的计数

标签 c# sql sql-server

我有这个 View

-----------------------------------
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 和 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; 的情况下实现此目的?对于 View 中的每一列?
我看过Select multiple counts from one database table in one sql command access和其他人,但他们都没有解决我的问题。

最佳答案

使用枢轴的例子;

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

关于c# - 如何选择多列的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54438788/

相关文章:

c# - 调用 log4net 包装器方法后未在日志中获取文件名和行号

c# - 如何从 HttpPost Create 操作方法中了解选定的复选框?

sql - oracle中的合并语句问题

c# - 需要将查询中的 "merge" block 记录合二为一,视其他查询列而定

c# - 如何使用 Entity Framework Code First 定义一对一的自引用

c# - 未分配属性的对象初始值设定项

MySQL 根据另外两列的值自动递增 ID

MySql:替换成数字=数字+1

javascript - 在 Sequelize.js 中自定义或覆盖连接

如果routine_definition大于4000个字符,则SQL查询获取存储过程裁剪结果