Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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 外部查询和子查询中使用的计数和分组函数_Sql_Sql Server - Fatal编程技术网

Sql 外部查询和子查询中使用的计数和分组函数

Sql 外部查询和子查询中使用的计数和分组函数,sql,sql-server,Sql,Sql Server,我编写了一个查询,其中包括创建一个表中的总和数字和值百分比(转储到一行)。每个子查询的WHERE参数略有不同。例如: select distinct count(KS2_PupilMatchingRefAnonymous) AS 'Total Pupils', (select count(KS2_PupilMatchingRefAnonymous) from KS2_CandInd_2011 where KS2_MMSCH=1 an

我编写了一个查询,其中包括创建一个表中的总和数字和值百分比(转储到一行)。每个子查询的WHERE参数略有不同。例如:

select distinct
count(KS2_PupilMatchingRefAnonymous) AS 'Total Pupils',

    (select count(KS2_PupilMatchingRefAnonymous) 
        from KS2_CandInd_2011 
        where KS2_MMSCH=1 
        and KS2_ELIGENGTA=1) AS 'All Eligible Pupils',
    (select count(*) 
        from KS2_CandInd_2011 
        where KS2_MMSCH=1 
        and KS2_ELIGENGTA=1 
        and KS2_ELIGENGTA=1 
        and FSMeligible=1) AS 'Eligible FSM only',  
    (select round(
    (cast((
        select count(*) 
            from KS2_CandInd_2011 
            where KS2_MMSCH=1 
            and KS2_ELIGENGTA=1 
            and KS2_ELIGENGTA=1 
            and FSMeligible=1) AS float) / 
    cast((
        select count(KS2_PupilMatchingRefAnonymous) 
            from KS2_CandInd_2011 
            where KS2_MMSCH=1 
            and KS2_ELIGENGTA=1) AS float))*100,2
             )) AS '% Eligible FSM'
from KS2_CandInd_2011
where KS2_MMSCH=1
现在,我希望根据性别使用计数(当然还有分组依据)对每个子查询进行细分。如果将性别的计数/分组依据放在外部查询中,我只会得到“学生总数”值的细分/拆分

如果我试图在子查询中输入相同的子句,我会被告知

Msg 116,16级,状态1,第12行 当子查询未引入EXISTS时,只能在选择列表中指定一个表达式


根据一个相关的子查询,内部查询并没有真正引用外部查询,所以尽管我做了最好的尝试,我还是不确定如何克服这个错误。有人有什么建议吗?

我们可以用如下所示的更简单的方式重新编写您的查询。(假设您的表中有一个名为
gender
的列:
KS2\u CandInd\u 2011

select 
a.gender
,count(*) AS 'Total Pupils',
,sum(case 
         when KS2_MMSCH=1 and  KS2_ELIGENGTA=1 then  1
       else 0
    end
    ) as  'All Eligible Pupils'
,sum(case
    when KS2_MMSCH=1 and KS2_ELIGENGTA=1 and KS2_ELIGENGTA=1 and FSMeligible=1 then 1
      else 0
    end) as  'Eligible FSM only'
,round(cast( sum(case 
                    when KS2_MMSCH=1 and  KS2_ELIGENGTA=1 then  1
                  else 0
                end
            ) as float)/

cast(sum(case
    when KS2_MMSCH=1 and KS2_ELIGENGTA=1 and KS2_ELIGENGTA=1 and FSMeligible=1 then 1
      else 0
    end)  as float)
        *100,2)  AS '% Eligible FSM'
from KS2_CandInd_2011 as a
where a.KS2_MMSCH=1
group by a.gender
order by a.gender;
我相信以下内容将为您提供原始查询的准确输出:

    select 
   ,count(*) AS 'Total Pupils',
    ,sum(case 
             when KS2_MMSCH=1 and  KS2_ELIGENGTA=1 then  1
           else 0
        end
        ) as  'All Eligible Pupils'
    ,sum(case
        when KS2_MMSCH=1 and KS2_ELIGENGTA=1 and KS2_ELIGENGTA=1 and FSMeligible=1 then 1
          else 0
        end) as  'Eligible FSM only'
    ,round(cast( sum(case 
                        when KS2_MMSCH=1 and  KS2_ELIGENGTA=1 then  1
                      else 0
                    end
                ) as float)/

    cast(sum(case
        when KS2_MMSCH=1 and KS2_ELIGENGTA=1 and KS2_ELIGENGTA=1 and FSMeligible=1 then 1
          else 0
        end)  as float)
            *100,2)  AS '% Eligible FSM'
    from KS2_CandInd_2011 as a
    where a.KS2_MMSCH=1
;

是的!这是有效的,尽管百分比值有点低(558%!),但我可以解决这个问题。我想关键是使用SUM而不是COUNT,然后呢?非常感谢!当我必须计算东西时,我总是使用上述构造,但基于各种条件。如果这解决了您的问题,那么您可以通过单击勾号图标将其作为有效答案接受。