Sql server 不同于多个查询的记录
数据: 查询:Sql server 不同于多个查询的记录,sql-server,tsql,merge,Sql Server,Tsql,Merge,数据: 查询: --Table 1 : Id ZoneName ----------- -------- 20011 Name1 10027 Name1 20011 Name1 20011 Name1 20011 Name1 20074 Name1 20011 Name2 20011 Name2 10059 Name3 20011 Name2 结果: Select T
--Table 1 :
Id ZoneName
----------- --------
20011 Name1
10027 Name1
20011 Name1
20011 Name1
20011 Name1
20074 Name1
20011 Name2
20011 Name2
10059 Name3
20011 Name2
结果:
Select Top 2 [Id] From Table1 -- First Query
WHERE ZoneName = 'Name1'
UNION
SELECT Top 1 [Id] from Table1 -- Second Query
WHERE ZoneName = 'Name1'
UNION
SELECT Top 1 [Id] from Table1 -- Third Query
WHERE ZoneName = 'Name1'
预期结果:
Id
-----
20011
从上面的查询中,我需要每个查询中3个相互不重叠的结果,在这种情况下,预期结果应该包含查询1的前2个结果,即20011和10027,对于下一个前1,它应该排除这2个结果,并返回查询2的20074
注意:我在这个例子中使用了一个WHERE条件,但是在实际的查询中,每个查询都有不同的WHERE条件,并且可能最终得到与上面的查询相同/不同的结果
20011
10027
20074
WITH w1 AS
(
SELECT TOP 2 [Id]
FROM Table1 -- First Query
WHERE ZoneName = 'Name1'
),
w2 AS
(
SELECT TOP 1 [Id]
FROM Table1 -- Second Query
WHERE ZoneName = 'Name1'
AND ID NOT IN
( SELECT ID
FROM w1
)
),
w3 AS
(
SELECT Top 1 [Id]
FROM Table1 -- Second Query
WHERE ZoneName = 'Name1'
AND ID NOT IN
( SELECT ID
FROM w1
UNION
SELECT ID
FROM w2
)
)
SELECT * FROM w1
UNION
SELECT * FROM w2
UNION
SELECT * FROM w3