Отображение SQL в процентах от 1 столбца в двух столбцах

#sql #sql-server #pivot

#sql #sql-сервер #сводная

Вопрос:

У меня есть один столбец мужского и женского пола, я вычислил проценты и отобразил их как таковые,

 Gender      %
M       50.8
F       49.2
  

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

 M      F
50.8   49.2
  

Комментарии:

1. Я использую Microsoft SQL, извините, я забыл упомянуть

Ответ №1:

выполнить агрегирование

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

Комментарии:

1. Спасибо, это работает для отображения после вычисления, но если у меня не было вычисленных %, как мне вычислить его таким образом, чтобы оно отображалось по желанию?

Ответ №2:

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

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

Комментарии:

1. Извините, я неправильно задал свой вопрос, я хотел бы знать, «как вычислить» %, чтобы отобразить столбцы

Ответ №3:

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

 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. Спасибо! это работает, но без вычисления процентов, как мне рассчитать его таким образом, чтобы он отображался в желаемом формате

2. Я бы хотел, чтобы они отображались в двух отдельных столбцах, как показано в последней строке

3. @RoiboisTx, выполните его — он покажет вам значение в двух столбцах

4. Да, но я хотел бы включить мой расчет % в решение, а не только значения, это не сработает, если я просто подключу его туда, как мне также включить вычисление % в решение?

5. @RoiboisTx, я изменил это — теперь вы можете проверить

Ответ №4:

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

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

Ответ №5:

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

Отказ от ответственности — этот код не тестировался. Но логика имеет значение, если она не работает.

Это только для male и может быть значительно упрощено, если посмотреть на решение fa06, но только для того, чтобы чисто вычислить %, адаптируйте логику выше — так:

Количество определенного пола / общее количество записей, предназначенных для вычисления процента на * 100

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