Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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 Server 2012查询多个但不是所有列计数_Sql - Fatal编程技术网

SQL Server 2012查询多个但不是所有列计数

SQL Server 2012查询多个但不是所有列计数,sql,Sql,我正在为SQL Server 2012中的应用程序生成查询。这个查询应该从SQLServer的一个表中获取各种状态 表的结构如下所示: ProjectType | Team | ProjectStatus ---------------------------------- Proj1 B Rec Proj1 B Rec Proj1 B Hold Proj2 B Rec P

我正在为SQL Server 2012中的应用程序生成查询。这个查询应该从SQLServer的一个表中获取各种状态

表的结构如下所示:

ProjectType | Team | ProjectStatus 
----------------------------------
 Proj1          B      Rec
 Proj1          B      Rec
 Proj1          B      Hold
 Proj2          B      Rec
 Proj3          A      Hold
 Proj4          C      Some
我想要的结果是:

ProjectType | Total | Team | Rec| Hold | Some |
-----------------------------------------------
  Proj1         3      B      2     1      0
  Proj2         1      B      1     0      0
  Proj3         1      A      0     1      0
  Proj4         1      C      0     0      1
我认为这是可能的,因为我知道他们的所有状态:

所有状态都是

Rec, BA, DQ, P, Prev, PRed, PCom, 90, 90Rev, 90Red, 90Com, SS, SSRed, D, C
到目前为止,我所尝试的:

select 
    ProjectType, Team, count(ProjectStatus) 
from 
    sites 
where 
    (ProjectType is not null and ProjectType <> '') and Team <> '' 
group by 
    ProjectType, Team 


select 
    s.ProjectType, S.Team, S.ProjectType, C.cnt
from 
    Sites s
Inner Join 
    (Select ProjectType, Count(ProjectStatus) as cnt 
     from Sites 
     Where ProjectStatus = 'Rec' group By ProjectType) C on S.ProjectType = c.ProjectType
每个状态,我有,以便计算他们都单独

编辑:但是输出是错误的,它计算了所有不同项目的相同项目类型(比如我有10个不同的项目),它显示了所有相同的项目10次


有没有更好的方法来做这件事-有人能帮我完成吗

根据您的问题,您似乎有多个状态(所有已知),并希望按状态显示计数——将状态放在顶部。使用PIVOT有很多方法可以做到这一点,但我现在还没有在一台有开发人员资源的计算机上,所以我会这样做(在我的头脑中——未经测试)


谢谢您的回答!我想我可以从这个开始,计数(*)作为总计,但是应该只计算该项目类型,就像只计算该项目类型的(rec、BA、DQ…等等)一样。还没有测试过这个。当有一个问题,我无法找到正确的地方把它。。。有些项目类型为空(null)我尝试添加到Where,但似乎没有任何有效的想法?您想如何处理
null
ProjectType?抱歉,我有更多的列不需要用于此查询,有些项目类型为空,但我只是使用了错误的语法进行快速修复。。。我正在检查nul的ProjectStatus,而不是我想要的ProjectType。。谢谢你的帮助,一切都很好!!
Inner Join ( Select ProjectType, Count(ProjectStatus) as cnt from Sites 
Where ProjectStatus='Rec' group By ProjectType) C 
on S.ProjectType = c.ProjectType
select 
  ProjectType,
  count(*) as Total,
  Team,
  sum(case when ProjectStatus = 'Rec' then 1 else 0 end) as 'Rec',
  sum(case when ProjectStatus = 'Hold' then 1 else 0 end) as 'Hold',
  sum(case when ProjectStatus = 'Some' then 1 else 0 end) as 'Some'
from
  sites
where
  ProjectStatus in ('Rec', 'Hold', 'Some')
group by
  ProjectType,
  Team