Процент SQL для отображения одного столбца в двух столбцах - PullRequest
0 голосов
/ 05 марта 2019

У меня есть один столбец «Мужской» и «Женский», и я рассчитал проценты и отобразил их в таком виде:

Gender      %
M       50.8
F       49.2

Как рассчитать%, чтобы результаты отображались в двух отдельных столбцах? (MicrosoftSQL), например;

M      F
50.8   49.2

Ответы [ 5 ]

0 голосов
/ 05 марта 2019

Похоже, что ответ от 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

Надеюсь, это поможет

0 голосов
/ 05 марта 2019

Просто используйте условное агрегирование:

select max(case when gender = 'M' then [%] end) as m,
       max(case when gender = 'F' then [%] end) as f
from t;
0 голосов
/ 05 марта 2019

сделать агрегацию

        select Gender,
        max(case when Gender='M' then value end),
        max(case when Gender='F' then value end) 
        from table group by Gender
0 голосов
/ 05 марта 2019
    SELECT *
    FROM (
        SELECT 
            Gender, %
      from tableName
    ) as s
    PIVOT
    (
        SUM(%)
        FOR Gender IN (M,F)
    )AS pvt

если возникнут проблемы, скажите мне.

0 голосов
/ 05 марта 2019

Попробуйте условное агрегирование, используя случай, когда выражение

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...