返回“默认”记录集的SQL查询

时间:2019-01-04 23:07:54

标签: sql-server

我需要一个处理“ default recordset”概念的查询。

如果在运行查询时未找到请求的记录,则需要获取一组默认数据。

这里是一个例子:

Rec Category       Location 
--  --------       -------- 
1     Attendee        0   
2     Distributor     0
3     Sponsor         0
4     Attendee        1
5     Distributor     1
6     Sponsor         1
7     Attendee        2
8     Distributor     2
9     Sponsor         2
  1. 在情况1中,请求的记录是匹配的(例如SELECT * FROM Category WHERE Location = 1)。显然,这将返回记录4、5和6。

  2. 在情况2中,查询不匹配表中的记录,因此我需要默认记录;在这种情况下,我想将记录1、2和3作为默认记录。 SELECT * FROM Category WHERE Location = 5将一无所获,因此应返回这些默认记录。

我将如何实现?

2 个答案:

答案 0 :(得分:2)

由于Requested Records不清楚。我最终得到了简单的方法。请检查下面的查询。

Select * from (
    select * from Category Where Location = 1
) t Where <Expression> = <Something>
union
select * from (
    select * from Category where Location = 5
) t2 Where <Expression> != <Something>

如果您要求的Records部分是另一个select语句,则可以使用

Select * from (
    select * from Category Where Location = 1
) t Where Exists (Select 1 from tablex WHERE <Expression> = <Something> )
union
select * from (
    select * from Category where Location = 5
) t2 Where NOT Exists (Select 1 from tablex WHERE <Expression> = <Something> )

答案 1 :(得分:0)

谢谢西蒙娜丽。 我想通过一个简单的选择来解决这个问题,而您的解决方案正是我所需要的。 (我正在发布新答案,因为我不知道如何在回复中设置代码格式。)

1)当存在位置= 1之类的位置的记录时,我想要这些记录。

2)当某个位置的记录不存在时,我想要“默认”记录,即位置= 0处的记录。

    -- Records for the location exists, return them
select * from Category Where Location = 1
union
select * from Category Where Location = 0 and not exists 
(select * from Category Where Location = 1)

-- Records for the location do not exists, return the default records (location=0)
select * from Category Where Location = 7
union
select * from Category Where Location = 0 and not exists 
(select * from Category Where Location = 7)