2012-04-11 98 views
0

我正在使用SSMS 2008 R2,并试图找出SQL select语句来选择找到两个或更多值的所有记录。SQL查询两个可能的值?

这些是我正在寻找的四种可能的值。如果符合这些值中的两个或更多(SubstanceAbuse,BehaviorEmotion,SexualAbuse,DomesticViolence),我想将新字段设置为1.我该怎么做?

case when qav.[test_setup_details_caption] in ('Substance Abuse/Drug Use','Caregiver monitor youth for drug alcohol use') then 1 else 0 end SubstanceAbuse, 
    case when qav.[test_setup_details_caption] in ('Physical Aggression','Firesetting','Gang Involvement','Runaway Behavior') then 1 else 0 end BehaviorEmotion, 
    case when qav.[test_setup_details_caption] = 'Problem Sexual Behavior' then 1 else 0 end SexualAbuse, 
    case when qav.[test_setup_details_caption] LIKE '%Domestic%' then 1 else 0 end DomesticViolence, 

回答

2

我的建议是采取上述语句,并使其成为一个新的SELECT语句中的虚拟表。然后,你可以在做的那些一个SUM(因为它们已经计算)的WHERE语句,并只显示

where (Sub + Beh + Sex + Dom) > 1 

它看起来是这样的(伪代码):

SELECT t.* 
FROM (SELECT sub case, Beh case, etc. 
     FROM yourtable) t 
WHERE (t.sub + t.Beh + t.Sex + t.Dom) > 1 
+0

感谢Biggs这就是它! – salvationishere 2012-04-11 18:44:37

0

好像所有你需要的是这样的WHERE子句:

WHERE SubstanceAbuse + BehaviorEmotion + SexualAbuse + DomesticViolence > 1 
+0

本质你是正确的大卫。唯一的问题是WHERE子句在SELECT语句之前被计算出来,所以如果这些case语句在SELECT中,你不能通过它们的别名访问它们,因为别名尚未被创建。这就是为什么在我的回答中,我把整个查询放在FROM语句中,这样我可以做一些类似于你所想的事情。 – IAmTimCorey 2012-04-11 19:43:02

0
update myTable set myField = 1 where 2 <= (select SubstanceAbuse + BehaviorEmotion + SexualAbuse + DomesticViolence from ...) 

当然,这仅仅是为您的查询模板,但你的想法。如果答案仍然不清楚,那么我请你给我更多的细节。

最好的问候, Lajos Arpad。