Обобщить агрегированные данные

У меня есть такая таблица:

SoftwareName    Count    Country
Project         15       Canada
Visio           12       Canada
Project         10       USA
Visio           5        USA

Как мне запросить его, чтобы получить сводку вроде ...

SoftwareName    Canada    USA    Total
Project         15        10     25
Visio           12        5      17

Как это сделать в T-SQL?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
4
0
455
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий
SELECT SoftwareName, 
  SUM( CASE Country WHEN 'Canada' THEN [Count] ELSE 0 END ) AS Canada,
  SUM( CASE Country WHEN 'USA'    THEN [Count] ELSE 0 END ) AS USA,
  SUM( [Count] ) AS Total
FROM [Table] 
GROUP BY SoftwareName;

Это называется поворотом таблицы. В вашем простом случае всего два столбца; в общем, может быть около 200 стран, и в этом случае поворот становится довольно трудным.

В Интернете есть много ресурсов, описывающих, как это сделать: Google для "pivot table sql".

в SQL 2005 или более поздних версиях есть ключевое слово SQL "Pivot", которое делает это за вас, Ознакомьтесь со следующей ссылкой:

http://msdn.microsoft.com/en-us/library/ms177410.aspx

Хорошо ... Вот как это сделать с помощью PIVOT:

SELECT Softwarename, Canada, USA, Canada + USA As TOTAL from SoftwareDemo 
PIVOT 
    (
     SUM([Count])
     FOR Country
     IN (Canada, USA)
    ) AS x


Softwarename                                       Canada      USA         TOTAL
-------------------------------------------------- ----------- ----------- -----------
Project                                            15          10          25
Visio                                              12          5           17

(2 row(s) affected)

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

sammydc 30.10.2008 21:44

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

MarlonRibunal 31.10.2008 10:30

Я думаю, вы можете использовать эту ссылку:

Сумма уникальных записей - производительность лучше, чем у курсора

и я думаю, что использование функции PIVOT имеет лучшую функцию оценки производительности SUM ().!

Другие вопросы по теме