Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server:Wie verwendet man UNION mit zwei Abfragen, die BEIDE eine WHERE-Klausel haben?

Sie sollten in der Lage sein, sie zu aliasieren und als Unterabfragen zu verwenden (ein Grund, warum Ihr erster Versuch ungültig war, war, dass die erste Auswahl zwei Spalten hatte (ID und ReceivedDate), Ihre zweite jedoch nur eine (ID) hatte - außerdem ist Type eine reservierte Wort in SQL Server und kann nicht so verwendet werden, wie Sie es als Spaltenname hatten):

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