2013-05-31 4 views
0

Я получаю два набора результатов из нижеследующего запроса, который я хочу «объединить» результаты в один отдельный стол, но не уверен, как это исходит отсюда, может кто-то проконсультируйтесь с вами:SQL Server + «Слияние результатов»

SELECT userid, vehicleId, count(vehicleId) As SearchCount FROM MemberSearches 
GROUP BY userid, vehicleId 
ORDER BY count(vehicleId) DESC 

SELECT f.UserId, v.AutoId AS VehicleId, count(v.AutoId) AS SearchCount FROM Favorites f 
LEFT JOIN [SellPost] sp 
ON (f.PostId = sp.AutoId) 
LEFT JOIN [Vehicle] v 
ON (sp.CarId = v.AutoId) 
GROUP BY f.UserId, v.AutoId 
ORDER BY COUNT(v.AutoId) DESC 

Результат от первого выбора:

UserId  VehicleId SearchCount 
2926FC8A78FB 7  3 
2926FC8A78FB 2  2 
2926FC8A78FB 6  1 

Результат от второго выбора:

UserId  VehicleId SearchCount 
2926FC8A78FB 1  5 
2926FC8A78FB 2  5 

мне нужно для достижения конечного результата, как:

UserId  VehicleId SearchCount 
2926FC8A78FB 1  5 
2926FC8A78FB 2  7 
2926FC8A78FB 6  1 
2926FC8A78FB 7  3 

ответ

2

Не эффективно, просто проверить свою работу ...

SELECT userid, vehicleId, SUM(SearchCount) As SearchCount 
FROM 
(SELECT userid, vehicleId, count(vehicleId) As SearchCount FROM MemberSearches 
GROUP BY userid, vehicleId 
UNION ALL 
SELECT f.UserId, v.AutoId AS VehicleId, count(v.AutoId) AS SearchCount FROM Favorites f 
LEFT JOIN [SellPost] sp 
ON (f.PostId = sp.AutoId) 
LEFT JOIN [Vehicle] v 
ON (sp.CarId = v.AutoId) 
GROUP BY f.UserId, v.AutoId 
) t 
GROUP BY userid, vehicleId 
+0

@ user415795 Этот ответ дает вам ожидаемый результат? – vikas

+0

Почему это не сработает? – vikas

+0

Спасибо, ребята, это действительно дает желаемый результат. – k80sg

0

Вы не можете просто использовать UNION здесь; рассмотрите vehicleid , где желаемый результат - это сумма строк в каждом подзапросе.

Вы можете присоединиться к двум результатам вместе:

SELECT t1.userid, t2.vehicleId, SearchCount = t1.SearchCount + t2.SearchCount 
FROM 
(
    SELECT userid, vehicleId, count(vehicleId) As SearchCount FROM MemberSearches 
    GROUP BY userid, vehicleId 
) t1 
INNER JOIN 
(
    SELECT f.UserId, v.AutoId AS VehicleId, count(v.AutoId) AS SearchCount FROM Favorites f 
    LEFT JOIN [SellPost] sp 
    ON (f.PostId = sp.AutoId) 
    LEFT JOIN [Vehicle] v 
    ON (sp.CarId = v.AutoId) 
    GROUP BY f.UserId, v.AutoId 
) t2 on t1.userid = t2.userid and t1.vehicleid = t2.vehicleid 
ORDER BY userid, vehicleid 

В зависимости от данных, вам может понадобиться использовать LEFT или FULL присоединиться здесь.

Или пользователь @Serge имеет другую альтернативу.

1
SELECT 
    userid, vehicleId, count(*) As SearchCount 
FROM (
    SELECT userid, vehicleId FROM MemberSearches 

    UNION ALL 

    SELECT f.UserId, v.AutoId FROM Favorites f 
    LEFT JOIN [SellPost] sp 
    ON (f.PostId = sp.AutoId) 
    LEFT JOIN [Vehicle] v 
    ON (sp.CarId = v.AutoId) 
) AS X 
GROUP BY userid, vehicleId 
ORDER BY 3 DESC 
Смежные вопросы