Skip to content
Advertisement

UNION does not remove duplicates in result

I have 2 queries that i need the result to be combined (no duplicates), i thought UNION would work but the result is as if i used UNION ALL.

SELECT Cams_Global.dbo.A960.OmrådesNr, Cams_Global.dbo.A960.OmrådesBenämning, 0 AS Antal
FROM A406 INNER JOIN
      Cams_Global.dbo.A960 ON A406.OmrådesNr = Cams_Global.dbo.A960.OmrådesNr
WHERE        (A406.Kund IN (5566321537))
UNION
SELECT A960_1.OmrådesNr, A960_1.OmrådesBenämning, COUNT(A806.Aordernr) AS Antal
FROM A806 INNER JOIN
    A406 AS A406_1 ON A806.Ställeid = A406_1.Ställeid INNER JOIN
    A400 ON A806.Objektid = A400.Objektid INNER JOIN
    A402 ON A400.ObjGrupp = A402.Objgrupp INNER JOIN
    Cams_Global.dbo.A957 ON A806.LevId = Cams_Global.dbo.A957.LevId RIGHT OUTER JOIN
    Cams_Global.dbo.A960 AS A960_1 ON A406_1.OmrådesNr = A960_1.OmrådesNr
WHERE (A806.Beställning = 0) AND (Cams_Global.dbo.A957.LevIdGrupp IN (1001, 1000)) AND                 
(A806.ProtokollSparad = 0) AND (A406_1.Kund = 5566321537)
GROUP BY A960_1.OmrådesBenämning, A960_1.OmrådesNr
ORDER BY Cams_Global.dbo.A960.OmrådesBenämning

What i get now

1031    Fagersanna 0
1031    Fagersanna 19
1046    Sånna      0
1032    Tibro      0
1032    Tibro      40

And what i want

1031    Fagersanna 19
1046    Sånna      0
1032    Tibro      40

Advertisement

Answer

You can try the below way – using aggregation on top of your query

select OmrådesNr,OmrådesBenämning,max(Antal) as Antal
from
(
SELECT Cams_Global.dbo.A960.OmrådesNr, Cams_Global.dbo.A960.OmrådesBenämning, 0 AS Antal
FROM A406 INNER JOIN
      Cams_Global.dbo.A960 ON A406.OmrådesNr = Cams_Global.dbo.A960.OmrådesNr
WHERE        (A406.Kund IN (5566321537))
UNION
SELECT A960_1.OmrådesNr, A960_1.OmrådesBenämning, COUNT(A806.Aordernr) AS Antal
FROM A806 INNER JOIN
    A406 AS A406_1 ON A806.Ställeid = A406_1.Ställeid INNER JOIN
    A400 ON A806.Objektid = A400.Objektid INNER JOIN
    A402 ON A400.ObjGrupp = A402.Objgrupp INNER JOIN
    Cams_Global.dbo.A957 ON A806.LevId = Cams_Global.dbo.A957.LevId RIGHT OUTER JOIN
    Cams_Global.dbo.A960 AS A960_1 ON A406_1.OmrådesNr = A960_1.OmrådesNr
WHERE (A806.Beställning = 0) AND (Cams_Global.dbo.A957.LevIdGrupp IN (1001, 1000)) AND                 
(A806.ProtokollSparad = 0) AND (A406_1.Kund = 5566321537)
GROUP BY A960_1.OmrådesBenämning, A960_1.OmrådesNr
)A group by OmrådesNr,OmrådesBenämning
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement