-- ==================================================
-- Sql Server INTERSECT ALL workaround
-- ==================================================
with INTERSECT_ALL as (
select ROW_NUMBER() over (
partition by region, country, city
order by (select 0)
) as rownum -- only those intersection(smaller) RowNum will remain
, region
, country
, city
from HR.Employees
INTERSECT
select ROW_NUMBER() over (
partition by region, country, city
order by (select 0)
) as rownum -- only those intersection(smaller) RowNum will remain
, region
, country
, city
from Sales.Customers
)
select country, region, city
from INTERSECT_ALL
-- ==================================================
-- Sql Server EXCEPT ALL workaround
-- ==================================================
with EXCEPT_ALL as (
select ROW_NUMBER() over (
partition by region, country, city
order by (select 0)
) as rownum -- intersection(smaller) RowNum will be removed
, region
, country
, city
from HR.Employees
EXCEPT
select ROW_NUMBER() over (
partition by region, country, city
order by (select 0)
) as rownum -- intersection(smaller) RowNum will be removed
, region
, country
, city
from Sales.Customers
)
select country, region, city
from EXCEPT_ALL
-- ==================================================
-- Using ORDER BY inside set operation
-- ==================================================
select empid, orderid, orderdate
from (
select top(2) empid, orderid, orderdate
from Sales.Orders
where empid = 3
order by orderdate desc, orderid desc
) as D1
union all
select empid, orderid, orderdate
from (
select top(2) empid, orderid, orderdate
from Sales.Orders
where empid = 5
order by orderdate desc, orderid desc
) as D2