SQL:对列中的每行值进行计数,并将计数返回到多列中

SQL:对列中的每行值进行计数,并将计数返回到多列中,sql,Sql,从这张桌子上 D_value ------- A B B C C C 要获得一行,请使用此选项 SELECT COUNT(CASE WHEN D_Value = 'A' THEN 1 END) AS A, COUNT(CASE WHEN D_Value = 'B' THEN 1 END) AS B, COUNT(CASE WHEN D_Value = 'C' THEN 1 END) AS C FROM MyTable 这适用于有限和固定数量的要计数的值 如果不

从这张桌子上

D_value ------- A B B C C C
要获得一行,请使用此选项

SELECT
   COUNT(CASE WHEN D_Value = 'A' THEN 1 END) AS A,
   COUNT(CASE WHEN D_Value = 'B' THEN 1 END) AS B,
   COUNT(CASE WHEN D_Value = 'C' THEN 1 END) AS C
FROM
   MyTable
这适用于有限和固定数量的要计数的值

如果不知道有多少个不同的值,那么需要进行简单的聚合,并在客户端代码中生成一行

SELECT D_value, COUNT(*) FROM MyTable GROUP BY D_value;

但是,这不会为不存在的值提供零计数。所以你需要一个查找表和左连接。我还不想去那里…

您希望有多少不同的值?为什么不能用传统的方法(每值一行,计数对):
从表组中选择D_值,按D_值计数(*)
?这将是按行操作,按列操作。
SELECT
   COUNT(CASE WHEN D_Value = 'A' THEN 1 END) AS A,
   COUNT(CASE WHEN D_Value = 'B' THEN 1 END) AS B,
   COUNT(CASE WHEN D_Value = 'C' THEN 1 END) AS C
FROM
   MyTable
SELECT D_value, COUNT(*) FROM MyTable GROUP BY D_value;