#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
Надеюсь, это поможет