Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 以每个ID的代码频率创建列_Sql_Sql Server - Fatal编程技术网

Sql 以每个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的不同代码的数量

   |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的方法对初学者来说更容易理解。将查看轴索,一点问题都没有。很高兴你们找到了问题的答案。谢谢你们的时间和答案,但戈登·林诺夫的方法对我来说更容易理解初学者。将查看轴索,一点问题都没有。很高兴你找到了问题的答案。