多重计数(表上为0

时间:2019-04-24 14:44:03

标签: sql sql-server

我有一个车辆数据库,想统计多少辆汽车具有特定颜色。

但是我不知道有多少种颜色,还有很多组合。 因此,这段代码对我没有帮助:

    SELECT
        SUM(CASE WHEN colour='red' THEN 1 ELSE 0 END) red,
        SUM(CASE WHEN colour='green' THEN 1 ELSE 0 END) green
    (etc)
    FROM vehicles

要获得所有颜色,我可以这样做:

    select distinct colour from vehicles

但是如何在上面的sql语句中使用该信息? 我正在使用MS sql服务器。

3 个答案:

答案 0 :(得分:4)

您可以将结果集放在行而不是列中:

SELECT colour, count(*)
FROM vehicles
GROUP BY colour;

另一种选择是,您将需要使用动态SQL或将结果集表示为XML或JSON。

答案 1 :(得分:2)

为什么不简单地进行汇总?

select colour, count(*) as no_vehicles
from vehicles v
group by colour;

答案 2 :(得分:0)

这将拉出载具中所有颜色的列表:

SELECT distinct colour
 from vehicles

但是您真正想要使用的是group by子句,如下所示:

SELECT
  colours
 ,count(*)  HowMany
 from vehicles
 group by
  colours

这将为列colours中的每个不同值产生一行。它不会解析颜色组合; “带有黑色镶边的红色”将在其自己的列中显示,而不是红色为+1,黑色不是_1-这将是一个更为复杂的问题。