Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server :Comment utiliser UNION avec deux requêtes qui DEUX ont une clause WHERE ?

Vous devriez pouvoir les aliaser et les utiliser comme sous-requêtes (une partie de la raison pour laquelle votre premier effort était invalide était parce que la première sélection avait deux colonnes (ID et ReceivedDate) mais votre seconde n'en avait qu'une (ID) - aussi, Type est un réservé mot dans SQL Server, et ne peut pas être utilisé tel quel comme nom de colonne) :

declare @Tbl1 table(ID int, ReceivedDate datetime, ItemType Varchar(10))
declare @Tbl2 table(ID int, ReceivedDate datetime, ItemType Varchar(10))

insert into @Tbl1 values(1, '20010101', 'Type_1')
insert into @Tbl1 values(2, '20010102', 'Type_1')
insert into @Tbl1 values(3, '20010103', 'Type_3')

insert into @Tbl2 values(10, '20010101', 'Type_2')
insert into @Tbl2 values(20, '20010102', 'Type_3')
insert into @Tbl2 values(30, '20010103', 'Type_2')

SELECT a.ID, a.ReceivedDate FROM
 (select top 2 t1.ID, t1.ReceivedDate
  from @tbl1 t1
  where t1.ItemType = 'TYPE_1'
  order by ReceivedDate desc
 ) a
union
SELECT b.ID, b.ReceivedDate FROM
 (select top 2 t2.ID, t2.ReceivedDate
  from @tbl2 t2
  where t2.ItemType = 'TYPE_2'
  order by t2.ReceivedDate desc
 ) b