0

我正在输入样本日期,我应该做一些与我要求类似的事情。我想运行一个查询,如果它有 1 或者如果任何一列有 1,它将把任何两列中的值拉出 3,它将只返回那些结果。但是,它应该搜索所有三列,并且在它发现值为 1 的三列中的任何一列中,它都应该返回该结果。谁能帮我解决这个问题。提前致谢。

ID  Patient PatientName prio  prio2   prio3
-----------------------------------------------------    
1   101563  Robert Riley    1   1   1
2   101583  Cody Ayers  1   0   1
3   101825  Jason Lawler    0   0   1
4   101984  Dustin Lumis    1   0   0
5   102365  Stacy smith 0   0   1
6   102564  Frank Milon 1   1   0
7   102692  Thomas Kroning  1   0   1
8   102856  Andrew Philips  1   0   0
9   102915  Alice Davies    0   0   1
10  103785  Jon Durley  0   0   1
4

2 回答 2

1

另一种选择:要求在列值中同时找到零和一。

WHERE 0 IN (prio, prio, prio3) AND 1 IN (prio, prio2, prio3)
于 2012-07-09T04:42:36.790 回答
1

如果我理解您的问题,您希望患者设置了 1 个或 2 个“Prio*”标志,但排除设置了 0 个或所有 3 个 Prio 标志的患者。假设标志被限制在 [0,1] 的域中 - 例如不可为空的位,那么以下应该可以解决问题:

SELECT ID, Patient, PatientName
FROM Patients
WHERE (0 + prio + prio2 + prio3 >= 1) AND (0 + prio + prio2 + prio3 <= 2)

编辑只是关于性能的注释-您没有提到哪个 SQL,但是像这样搜索位字段几乎肯定会导致表扫描。为了提高性能,您可以例如在 SQL Server 上创建一个持久计算列prio + prio2 + prio3,然后对其进行索引 - 根据数据的分布,索引至少具有选择性的战斗机会。

Edit2根据 Shawnt00 的评论,如果不强制转换为其中一种数字类型,则无法添加位字段。(谢谢!)

于 2012-07-09T03:03:22.940 回答