在两列中显示1列的SQL百分比

在两列中显示1列的SQL百分比,sql,sql-server,pivot,Sql,Sql Server,Pivot,我有一列男性和女性,计算了百分比并将其显示出来 Gender% M 50.8 F 49.2 如何计算%以使结果显示在两个单独的列上?(Microsoft SQL),例如 mf 50.8 49.2 尝试使用case-when表达式进行条件聚合 select concat(max(case when gender='M' then valueofpercentage end),'%') as 'M', concat(max(case when gender='F' then valueofpe

我有一列男性和女性,计算了百分比并将其显示出来

Gender%
M 50.8
F 49.2
如何计算%以使结果显示在两个单独的列上?(Microsoft SQL),例如

mf
50.8   49.2

尝试使用case-when表达式进行条件聚合

select concat(max(case when gender='M' then valueofpercentage end),'%') as 'M',
concat(max(case when gender='F' then valueofpercentage end),'%') as 'F'
from tablename
做聚合

        select Gender,
        max(case when Gender='M' then value end),
        max(case when Gender='F' then value end) 
        from table group by Gender

如果有任何问题,请告诉我。

只需使用条件聚合:

select max(case when gender = 'M' then [%] end) as m,
       max(case when gender = 'F' then [%] end) as f
from t;

看起来fa06的答案是正确的逻辑,但您在计算百分比时遇到了问题

以下是我刚刚创建的内容,旨在教您如何在sql中计算百分比:

declare 
@m as decimal,
@f as decimal,
@t as int

set @m = 50
set @f = 40
set @t = @m+@f

select Cast(@m / @t * 100 as decimal(5, 2)) as m, Cast(@f / @t * 100 as decimal(5 ,2)) as f
在这个场景中,@m和@f只是虚拟数字,@t是总数,因此为什么@m+@f,下面是如何得到表中的计数数,其中性别是男性-显然,将'm'更改为'f'可以得到女性

select count(gender) from tablename where gender = 'm' as 'm'
要进行计算,您需要对其进行如下调整:

Select Cast(Count(select gender from tablename where gender = 'm') / 
Count(select gender from tablename where gender in ('m', 'f')) * 100 as decimal(5,2) 
 as 'm' from tablename 
免责声明-此代码未经测试。但如果它不起作用,逻辑是相关的

这只适用于男性,通过查看fa06的解决方案,可以进一步简化,但仅用于计算上述逻辑-因此:

特定性别的数量/拟用于 按*100计算的百分比


希望这有帮助

我正在使用Microsoft SQL,很抱歉我忘了提及,谢谢!它可以工作,但是在没有计算百分比的情况下,我如何计算它,使它以所需的格式显示?我希望它们显示在两个单独的列上,如上一节所示line@RoiboisTx,您是否执行了它-它将在两列中显示值,但我想在解决方案中包括我对%的计算,不仅仅是值,如果我简单地将其插入其中,它就不起作用,我如何在解决方案中包括%的计算?@RoiboisTx,我已经修改了它-你现在可以检查抱歉,我的问题提出错误,我想知道“如何计算”百分比,以便显示在ColumnStanks上,这对计算后的显示有效,但是如果我没有计算出的%,我如何计算它以使其显示为所需?
Select Cast(Count(select gender from tablename where gender = 'm') / 
Count(select gender from tablename where gender in ('m', 'f')) * 100 as decimal(5,2) 
 as 'm' from tablename