Я пытаюсь объединить несколько столбцов в одну строку, используя приведенный ниже код.
select A.CreateDate as JoinDate, B.Section, C.UserName, cast(B.TotalProgress as decimal(10,0)) as TotalProgress
from B
join C on B.UserName = C.UserName
join A on C.UserId = A.UserId
WHERE (A.[CreateDate] >= '1/1/2018')
AND ((A.[CreateDate]) <= ('1/1/2019'))
UNION
select A.CreateDate as JoinDate, B.Section, C.UserName, cast(D.TotalProgress as decimal(10,0)) as TotalProgress
from B
join C on B.UserName = C.UserName
join A on C.UserId = A.UserId
join D on C.UserName = D.UserName
WHERE (A.[CreateDate] >= '1/1/2018')
AND ((A.[CreateDate]) <= ('1/1/2019'))
UNION
select A.CreateDate as JoinDate, B.Section, C.UserName, cast(B.TotalProgress_A as decimal(10,0)) as TotalProgress
from B
join C on B.UserName = C.UserName
join A on C.UserId = A.UserId
WHERE (A.[CreateDate] >= '1/1/2018')
AND ((A.[CreateDate]) <= ('1/1/2019'))
order by A.CreateDate desc
Проблема заключается в том, что запрос создает дубликаты.Я думаю, что проблема в TotalProgress в операторе select.Можно ли как-то устранить дубликаты в запросе?Я использую SQL Server 2016 Management Studio для выполнения этого запроса.
Ниже приведены результаты запроса при его запуске.
JoinDate | Section | UserName | TotalProgress
2019-01-03 | 1A | test1 | 0
2019-01-03 | 1A | test1 | 1
2019-01-03 | 1A | test1 | 22
2019-01-03 | 2B | test2 | 0
2019-01-03 | 2B | test2 | 33
2019-01-03 | 3C | test3 | 0
2019-01-03 | 3C | test3 | 1
Как вы можете видеть.Вы заметите, что прогресс только в другом.Я пытался использовать разные, но это не работает.В некоторых случаях все строки в общем прогрессе равны 0. Но в общем, я хочу, чтобы это было так.
JoinDate | Section | UserName | TotalProgress
2019-01-03 | 1A | test1 | 22
2019-01-03 | 2B | test2 | 33
2019-01-03 | 3C | test3 | 1