Sql 获取main中每个子组的计数
我想获得出现在主组中的每个子组的计数 鉴于以下情况:Sql 获取main中每个子组的计数,sql,sql-server,tsql,group-by,count,Sql,Sql Server,Tsql,Group By,Count,我想获得出现在主组中的每个子组的计数 鉴于以下情况: | Clothing | Colour ----------------------- | Shirt | black | Shirt | black | Shirt | black | Shirt | yellow | Shoes | yellow | Shoes | yellow | Shoes | black 我期望的结果是: | A
| Clothing | Colour
-----------------------
| Shirt | black
| Shirt | black
| Shirt | black
| Shirt | yellow
| Shoes | yellow
| Shoes | yellow
| Shoes | black
我期望的结果是:
| A | B
---------------------------
| Shirt_Blacks | 3
| Shirt_Yellows | 1
| Shoes_Blacks | 1
| Shoes_Yellows | 2
编辑:输出格式2:
| Clothing | Black | Yellow
-----------------------------------
| Shirt | 3 | 1
| Shoes | 1 | 2
尝试了以下操作但没有成功:
SELECT COUNT(Colour)
FROM [randomtable]
Group By Clothing
使用聚合:
SELECT CONCAT(Clothing, '_', Colour) A, COUNT(*) B
FROM mytable
GROUP BY Clothing, Colour
:
A | B
:----------- | -:
Shirt_black | 3
Shoes_black | 1
Shirt_yellow | 1
Shoes_yellow | 2
您可以按concat(服装,“"”,颜色)分组:
非常感谢。请再问一个问题。我在输出格式方面对我的文章进行了编辑。我必须如何调整查询以生成输出格式2?再次感谢你,伙计!:-)欢迎来到stackoverflow。你的答案可以通过解释它是如何解决这个问题来改进的。请参阅stackoverflow.com/help/how-to-answer
SELECT
Clothing,
SUM(CASE WHEN Colour = 'Black' THEN 1 ELSE 0 END) Black,
SUM(CASE WHEN Colour = 'Yellow THEN 1 ELSE 0 END) Yellow
FROM mytable
GROUP BY Clothing
SELECT
concat(clothing, '_', colour) A,
COUNT(*) B
FROM [randomtable]
Group By concat(clothing, '_', colour)
SELECT Clothing+'_'+Colour A, COUNT(*) B
FROM [randomtable]
GROUP BY Clothing+'_'+Colour
select * from [randomtable]
pivot
(count(colour) for colour in (black,yellow))AS piv