#sql #sql-server-2008
#sql #sql-server-2008
Вопрос:
У меня есть следующее объединение всех результатов
ID Name Date Team Total#1 Total#2
1 Test_1 4/25/2011 Team_1 110 0
1 Test_1 4/25/2011 Team_2 20 0
1 Test_1 4/25/2011 Team_3 170 0
1 Test_1 4/25/2011 Team_1 0 151
1 Test_1 4/25/2011 Team_3 0 98
Я хочу объединить результаты для каждой команды. Есть несколько повторяющихся названий команд с разными итоговыми значениями, а есть несколько уникальных названий команд с одним общим значением.
ID Name Date Team Total#1 Total#2
1 Test_1 4/25/2011 Team_1 110 151
1 Test_1 4/25/2011 Team_2 20 0
1 Test_1 4/25/2011 Team_3 170 98
Есть мысли?
Комментарии:
1. объединить результаты для каждой
team,id,name,date
комбинации или для каждой команды? Если последнее, то для чего должно отображатьсяid,name,date
в случае, если в сгруппированных строках разные значения?
Ответ №1:
SELECT Id, Name, Date, Team, SUM([Total#1]) [Total#1], SUM([Total#2]) [Total#2]
FROM YourUnionResult
GROUP BY Id, Name, Date, Team
Ответ №2:
Просто используйте агрегатные функции и GROUP BY
:
SELECT ID, Name, Date, Team, SUM(Total#1) as Total1, Sum(Total#2) as Total2
FROM Mytable
WHERE ...
GROUP BY ID, Name, Date, Team
Ответ №3:
разве это не работает?
select id,name,date,team,sum(Total#1) as Total#1,sum(Total#2) as Total#2
from Your table
group by id,name,date,team
Ответ №4:
Создайте select... union select...
подзапрос, и «внешний» запрос сопоставит его с group by.
Ответ №5:
Предполагая, что по какой-то причине стандартная группировка не работает, вы могли бы сделать это
SELECT t1.id,
t1.name,
t1.DATE,
t1.team,
t1.total_1,
t2.total_2
FROM (SELECT id,
name,
DATE,
team,
somecomplicatedcalculation total_1
FROM your table) t1
LEFT JOIN (SELECT id,
name,
DATE,
team,
somecomplicatedcalculation total_2
FROM your table) t2
ON t1.id = t2.id
and t1.team = t2.team
Вы также могли бы сделать то же самое с CTE
WITH t1
AS (SELECT id,
name,
DATE,
team,
somecomplicatedcalculation total_1
FROM your table),
t2
AS (SELECT id,
name,
DATE,
team,
somecomplicatedcalculation total_2
FROM your table)
SELECT *
FROM t1
INNER JOIN t2
ON t1.id = t2.id
and t1.team = t2.team
ИЛИ группировка при объединении будет работать для
SELECT id,
name,
DATE,
team,
SUM(total_1),
SUM(total_2)
FROM (SELECT id,
name,
DATE,
team,
somecomplicatedcalculation total_1,
0 AS total_2
FROM yourtable
UNION ALL
SELECT id,
name,
DATE,
team,
0 AS total_1,
somecomplicatedcalculation total_2
FROM yourtable) total
GROUP BY id,
name,
DATE,
team