繁体   English   中英

在SQL Server中选择Count

[英]Select Count in SQL Server

我有一个像这样的表[FeedbackPOS]

在此输入图像描述

我想在[Q1],[Q2],[Q3] .... [Q11]中获得5/4/3/2/1的多少条目

预期产量:

Rating | Q1 | Q2 .... Q11
-------+----+-------------
5star  | 2  | 3
4star  | 0  | 0
3star  | 1  | 0
2star  | 0  | 0
1star  | 0  | 0 ..... Q11

一种方法是取消数据转换然后重新转动。 以下用途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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM