Sql 以每个ID的代码频率创建列
我必须执行一个查询,在那里我可以计算每个Id的不同代码的数量Sql 以每个ID的代码频率创建列,sql,sql-server,Sql,Sql Server,我必须执行一个查询,在那里我可以计算每个Id的不同代码的数量 |Id | Code ------------ | 1 | C | 1 | I | 2 | I | 2 | C | 2 | D | 2 | D | 3 | C | 3 | I | 3 | D | 4 | I | 4 | C | 4 |
|Id | Code
------------
| 1 | C
| 1 | I
| 2 | I
| 2 | C
| 2 | D
| 2 | D
| 3 | C
| 3 | I
| 3 | D
| 4 | I
| 4 | C
| 4 | C
输出应该类似于:
|Id | Count | #Code C | #Code I | #Code D
-------------------------------------------
| 1 | 2 | 1 | 1 | 0
| 2 | 3 | 1 | 0 | 2
| 3 | 3 | 1 | 1 | 1
| 4 | 2 | 2 | 1 | 0
你能给我一些建议吗?使用条件聚合:
select id, count(*) as cnt,
sum(case when code = 'C' then 1 else 0 end) as code_c,
sum(case when code = 'I' then 1 else 0 end) as code_i,
sum(case when code = 'D' then 1 else 0 end) as code_d
from t
group by id;
使用条件聚合:
select id, count(*) as cnt,
sum(case when code = 'C' then 1 else 0 end) as code_c,
sum(case when code = 'I' then 1 else 0 end) as code_i,
sum(case when code = 'D' then 1 else 0 end) as code_d
from t
group by id;
您可以在SQL Server中尝试以下SQL代码 声明@table TableId tinyint,代码CHAR1 插入@table 价值观 1,'C', 1、‘我’, 2、‘我’, 2,'C', 2,'D', 2,'D', 3,'C', 3、‘我’, 3,'D', 4、‘我’, 4,'C', 4,'C'; 选择Id,c+d+i作为[计数],[c]作为[代码c],[d]作为[代码d],[i]作为[代码i] 来自@table 支点 [c]、[d]、[i]中代码的计数代码 作为pvt
您可以在SQL Server中尝试以下SQL代码 声明@table TableId tinyint,代码CHAR1 插入@table 价值观 1,'C', 1、‘我’, 2、‘我’, 2,'C', 2,'D', 2,'D', 3,'C', 3、‘我’, 3,'D', 4、‘我’, 4,'C', 4,'C'; 选择Id,c+d+i作为[计数],[c]作为[代码c],[d]作为[代码d],[i]作为[代码i] 来自@table 支点 [c]、[d]、[i]中代码的计数代码 作为pvt
看一看枢轴,这里有100个这样的例子和计数/求和。@Larnu谢谢你的提示!我来看看枢轴,这里有100个这样的例子和计数/求和。@Larnu谢谢你的提示!将研究它的简单和有效!感谢您的回答@Gordon Linoff简单有效!谢谢你的回答@Gordon Linoff谢谢你的时间和回答,但是Gordon Linoff的方法对初学者来说更容易理解。将查看轴索,一点问题都没有。很高兴你们找到了问题的答案。谢谢你们的时间和答案,但戈登·林诺夫的方法对我来说更容易理解初学者。将查看轴索,一点问题都没有。很高兴你找到了问题的答案。