2013-05-31 112 views
0

我是下面查詢中的2個結果集,我想將結果合併成1個單獨的表,但不知道如何從這裏開始,有人可以請提供一些指導: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 

根據數據,你可能需要使用這裏LEFTFULL加入。

或者user @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