Самый простой метод - несколько агрегаций:
Select 'TotalPost', count(*)
From dm.vSocialMediaPost
union all
select 'TotalImpression', sum(Impressions)
From dm.vSocialMediaPost
union all
select 'TotalLikes', sum(Likes)
From dm.vSocialMediaPost
union all
select 'Shares', Sum(Shares)
From dm.vSocialMediaPost
union all
select 'Engagements', Sum(Engagements)
From dm.vSocialMediaPost;
Однако, поскольку SQL Server поддерживает боковые объединения, лучший метод использует apply
:
select v.*
from (select Count(PostID) As TotalPost, sum(Impressions) As TotalImpression, sum(Likes) As TotalLikes, Sum(Shares) As Shares, Sum(Engagements) as Engagements
from dm.vSocialMediaPost
) x cross apply
(values ('TotalPost', TotalPost),
('TotalImpression', TotalImpression),
('TotalLikes', TotalLikes),
('Shares', Shares),
('Engagements', Engagements)
) v(which, val);
Это "лучший"потому что это требует агрегирования (и, следовательно, чтения) таблицы только один раз.Это должно быть значительно быстрее, чем несколько агрегаций.