Sql Server - отображать вторую запись ниже первой с другими данными - PullRequest
0 голосов
/ 10 июля 2019

У меня есть таблица sql с данными ниже:

Id   department     Amount
1      Accounting   10000
2      Catering      5000
3      Cleaning      5000

Я хочу вернуть данные, как показано ниже:

Id   department      Amount
1    Accounting      10000
1       50%
2     Catering       5000
2       25%     
3     Cleaning       5000
3       25%

Это означает, что все записи возвращают вторую запись чуть нижеэто и отображать процент от общей суммы.Я пытался использовать таблицу PIVOT, но все же не могу расположить вторую строку чуть ниже первой связанной.

Кто-нибудь когда-либо делал что-то подобное, мне нужны только некоторые рекомендации.

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Используйте CTE для расчета суммы сумм.Затем используйте UNION ALL для вашей таблицы и запрос, который рассчитывает проценты:

with cte as (select sum(amount) sumamount from tablename)
select id, department, amount 
from tablename
union all
select id, concat(100 * amount / (select sumamount from cte), '%'), null 
from tablename 
order by id, amount desc

См. demo .Результаты:

> id | department | amount
> -: | :--------- | -----:
>  1 | Accounting |  10000
>  1 | 50%        |   null
>  2 | Catering   |   5000
>  2 | 25%        |   null
>  3 | Cleaning   |   5000
>  3 | 25%        |   null
0 голосов
/ 10 июля 2019
create table #T(Id int, Dept varchar(10),Amount int)
insert into #T
values(1,'Accounting',10000),(2,'Catering',5000),(3,'Cleaning',5000)


declare @Totll float = (Select sum(Amount) from #T)

Select *
from #T
union
select Id,Convert(varchar(50), (Amount/@Totll)*100)+'%',0
from #T
order by Id,Amount desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...