如何在 SQL 中转换结果以便我可以同时看到计数和单个条目?

How do I pivot results in SQL so that I can see both the count and the individual entries?

我正在尝试从具有 4 列的 table 中获取计数。我在 pivot_data 中包含的 2 个是 'ocode' 和 'cname',另外 2 个与客户详细信息相关。我试图显示每个 'cname'(产品)有多少个 'ocode'(选项),因此产品和选项都可以在任意数量的组合中出现任意次数。

我目前有:

WITH pivot_data AS(
SELECT ocode,cname
FROM mi17
)
SELECT *
FROM pivot_data
PIVOT(
COUNT(ocode)
FOR cname
IN ('Dog','Cat','Horse')
);

结果如下

Dog    Cat    Horse
 1      2      3

但是 ocode 值会有所不同,例如'OC1'、'OC2'、'OC3' .我想要的是:

    Dog    Cat    Horse
OC1  1      1       1
OC2  0      1       0
OC3  0      0       2

您可以使用 Group by 和聚合来获得结果

SELECT ocode
,SUM(CASE WHEN cname='Dog' THEN 1 END) DOG
,SUM(CASE WHEN cname='Cat' THEN 1 END) CAT
,SUM(CASE WHEN cname='Horse' THEN 1 END) HORSE
FROM mi17
WHERE cname IN ('Dog','Cat','Horse')
GROUP BY ocode