我正在处理samle日期,我应该做类似于我所要求的事情。 我想运行一个查询,它会将任意两列中的值拉出3,如果它有1,或者如果任何一列有1,它将只返回那些结果。但是,它应该搜索所有三列,并且在它找到值为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
答案 0 :(得分:1)
如果我理解您的问题,您希望患者设置1或2个“Prio *”标志,但排除设置了零或全部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的评论,无法在不转换为其中一种数字类型的情况下添加位字段。 (谢谢!)
答案 1 :(得分:1)
另一种选择:要求在列值中找到零和一。
WHERE 0 IN (prio, prio, prio3) AND 1 IN (prio, prio2, prio3)