两列显示1列的SQL百分比

时间:2019-03-05 06:51:17

标签: sql sql-server pivot

我只有一列“男性”和“女性”,并计算了百分比并以此形式显示它们,

Gender      %
M       50.8
F       49.2

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

M      F
50.8   49.2

5 个答案:

答案 0 :(得分:0)

使用表达式时的大小写尝试条件聚集

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

答案 1 :(得分:0)

进行汇总

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

答案 2 :(得分:0)

    SELECT *
    FROM (
        SELECT 
            Gender, %
      from tableName
    ) as s
    PIVOT
    (
        SUM(%)
        FOR Gender IN (M,F)
    )AS pvt

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

答案 3 :(得分:0)

只需使用条件聚合:

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

答案 4 :(得分:0)

看起来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的百分比

希望这会有所帮助