【问题标题】:Distinct records from multiple queries [duplicate]来自多个查询的不同记录[重复]
【发布时间】:2013-08-17 19:26:46
【问题描述】:

数据:

--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    

预期结果:

20011
10027
20074

从上面的查询中,我需要每个查询的 3 个不相互重叠的结果,在这种情况下,预期结果应该包含查询 1 的前 2 个,即 20011 和 10027,而对于下一个前 1,它应该排除那些 2查询 2 的结果并返回 20074。

注意:我在此示例中使用了单个 WHERE 条件,但是在实际查询中,每个查询都有不同的 Where 条件,并且最终可能与上面的查询具有相同/不同的结果。

【问题讨论】:

    标签: sql-server tsql merge


    【解决方案1】:
    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
    

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多