[英]Select Count in SQL Server
一种方法是取消数据转换然后重新转动。 以下用途apply
和条件聚合:
select v.stars,
sum(case when v.q = 'q1' then 1 else 0 end) as q1,
sum(case when v.q = 'q2' then 1 else 0 end) as q2,
sum(case when v.q = 'q3' then 1 else 0 end) as q3,
sum(case when v.q = 'q4' then 1 else 0 end) as q4,
. . .
from t cross apply
(values ('q1', q1), ('q2', q2), . . .
) v(q, stars)
group by v.stars
order by v.stars;
需要取消数据显示您的数据模型不佳。 你应该有一个每个q
有一个单独行的表。
编辑:
如果您想要从所有评级开始,这是另一种方法:
select v.stars,
sum(case when t.q1 = v.stars then 1 else 0 end) as q1,
sum(case when t.q2 = v.stars then 1 else 0 end) as q2,
sum(case when t.q3 = v.stars then 1 else 0 end) as q3,
. . .
from (values (1), (2), (3), (4), (5)) v(stars) cross join
t
group by v.stars
order by v.stars;
你也可以这样做
CREATE TABLE T
(
Q1 INT,
Q2 INT,
Q3 INT
-- ...
);
INSERT INTO T VALUES
(5, 1, 2),
(5, 4, 5),
(3, 5, 5);
SELECT '5 Stars' Rating,
(SELECT COUNT(Q1) FROM T WHERE Q1 = 5) Q1,
(SELECT COUNT(Q2) FROM T WHERE Q2 = 5) Q2,
(SELECT COUNT(Q3) FROM T WHERE Q3 = 5) Q3
UNION
SELECT '4 Stars' Rating,
(SELECT COUNT(Q1) FROM T WHERE Q1 = 4) Q1,
(SELECT COUNT(Q2) FROM T WHERE Q2 = 4) Q2,
(SELECT COUNT(Q3) FROM T WHERE Q3 = 4) Q3
UNION
SELECT '3 Stars' Rating,
(SELECT COUNT(Q1) FROM T WHERE Q1 = 3) Q1,
(SELECT COUNT(Q2) FROM T WHERE Q2 = 3) Q2,
(SELECT COUNT(Q3) FROM T WHERE Q3 = 3) Q3
UNION
SELECT '2 Stars' Rating,
(SELECT COUNT(Q1) FROM T WHERE Q1 = 2) Q1,
(SELECT COUNT(Q2) FROM T WHERE Q2 = 2) Q2,
(SELECT COUNT(Q3) FROM T WHERE Q3 = 2) Q3
UNION
SELECT '1 Stars' Rating,
(SELECT COUNT(Q1) FROM T WHERE Q1 = 1) Q1,
(SELECT COUNT(Q2) FROM T WHERE Q2 = 1) Q2,
(SELECT COUNT(Q3) FROM T WHERE Q3 = 1) Q3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.