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