2012-04-11 6 views
0

Ich benutze SSMS 2008 R2 und versuche herauszufinden, die SQL-Select-Anweisung alle Datensätze, in denen zwei oder mehr der Werte gefunden werden.SQL-Abfrage für zwei mögliche Werte?

Dies sind die vier möglichen Werte, nach denen ich suche. Wenn zwei oder mehr dieser Werte (SubstanceAbuse, BehaviorEmotion, SexualAbuse, DomesticViolence) erfüllt sind, möchte ich ein neues Feld auf 1 setzen. Wie mache ich das?

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, 

Antwort

2

Mein Vorschlag wäre, die obige Anweisung zu nehmen und es zu einer virtuellen Tabelle in einer neuen SELECT-Anweisung zu machen. Dann können Sie eine SUM auf diejenigen tun (da sie bereits berechnet) in Ihrer WHERE-Anweisung und Anzeige nur

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

Es wäre so etwas wie dieses (Pseudo-Code) aussehen:

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

Danke Biggs das war es! – salvationishere

0

Es scheint, wie alles, was Sie brauchen diese Klausel WHERE ist:

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

Im Wesentlichen Du bist richtig David. Das einzige Problem ist, dass die WHERE-Klausel vor der SELECT-Anweisung berechnet wird. Wenn diese case-Anweisungen in SELECT enthalten sind, können Sie nicht auf sie über ihren Alias ​​zugreifen, da der Alias ​​noch nicht erstellt wurde. Deshalb habe ich in meiner Antwort die gesamte Abfrage in die FROM-Anweisung eingefügt, damit ich etwas Ähnliches tun konnte, was Sie dachten. – IAmTimCorey

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

Natürlich ist dies für Ihre Anfrage nur eine Vorlage, aber Sie bekommen die Idee. Wenn die Antwort noch unklar ist, bitte ich Sie, mir weitere Details zu geben.

Mit freundlichen Grüßen, Lajos Arpad.

Verwandte Themen