存储过程,用于查找3列中的2列中的值

时间:2012-07-09 02:55:51

标签: sql

我正在处理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

2 个答案:

答案 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)