Tsql 如何在T-SQL中实现异或?

Tsql 如何在T-SQL中实现异或?,tsql,sql-server-2008,sql-server-2008-r2,Tsql,Sql Server 2008,Sql Server 2008 R2,我有一个数据表,其中有一个列列表(在本例中归结为相关列): 从这个表中,我希望获取所有记录,其中: 该帐户属于指定的用户,并且 首先: 该帐户处于活动状态,并且今天的日期介于该帐户的生效日期和到期日期之间,或者 在第二种情况下: 如果一审未发现任何记录,则使用具有最新到期日的记录 所以-如果存在一个活动记录,其中今天的日期介于帐户的生效日期和到期日期之间,我需要该记录。只有在没有找到匹配项的情况下,我才希望该用户的任何帐户具有最新的到期日期。除非TSQL 2008中发生了根本性的变化

我有一个数据表,其中有一个列列表(在本例中归结为相关列):

从这个表中,我希望获取所有记录,其中:

  • 该帐户属于指定的用户,并且
  • 首先:
    • 该帐户处于活动状态,并且今天的日期介于该帐户的生效日期和到期日期之间,或者
  • 在第二种情况下:
    • 如果一审未发现任何记录,则使用具有最新到期日的记录

所以-如果存在一个活动记录,其中今天的日期介于帐户的生效日期和到期日期之间,我需要该记录。只有在没有找到匹配项的情况下,我才希望该用户的任何帐户具有最新的到期日期。

除非TSQL 2008中发生了根本性的变化,否则这是暴力

select *
from table
where (    ( condition 1 OR condition 2)
    AND NOT ( condition 1 AND condition 2)    )

我发现了一个解决方案:

select top 1 *
from accounts
where usr_key = @specified_user
order by
  acc_active desc,
  case 
    when getdate() between acc_effective and acc_expires then 0
    else 1
  end,
  acc_expires desc
这将有效地按正确的优先级顺序排列记录,使我能够从列表中选择最上面的一个


严格来说,它不能实现异或,但它可以应用于此数据集以实现相同的目的。

我可以将其作为子查询来实现,但也可以是“全选”、适当排序,并可能选择最上面的一个(取决于表结构、行数和索引)这是最好的方法。@Philip Kelley在这个例子中,它是一个小规模的应用程序,可供六个用户使用,数据集相当有限-外部可能不超过数万条记录,所以我认为这将是合适的。
select top 1 *
from accounts
where usr_key = @specified_user
order by
  acc_active desc,
  case 
    when getdate() between acc_effective and acc_expires then 0
    else 1
  end,
  acc_expires desc