2013-12-20 3 views
0

Folks,SQL Server подсчета неродственных условиям

Я исследовал этот вопрос первым и придумал ничего для моего конкретного вопроса, я нашел SUM/CASE, который в чистом виде, но не совсем то, что мне нужно. Вот моя ситуация:

Меня попросили сообщить общее количество людей, которые соответствуют 5 из 8 условий. У меня возникли проблемы с лучшим способом сделать это. Это должно быть связано с наличием counter для каждого условия, а затем добавлением счетчика в конце и возвратом количества людей, которые соответствовали 5 из 8 условий (назовите их условием a-h)

Так вы можете сделать счет графа?

Что-то вроде

if exists (code for condition A) 1 ELSE 0 
if exists (code for condition B) 1 ELSE 0 
etc 

sum(count) 

Спасибо

+2

Чтобы помочь вам, нам нужно больше информации о вашей схеме и о том, что вы пробовали до сих пор. Кроме того, с какой базой данных вы работаете? – user2989408

+1

Все ли условия, присутствующие в одной строке, или несколько строк, необходимо проанализировать? –

+0

Я работаю с SQL Server 2008 R2, для этого необходимо проанализировать несколько строк и таблиц. – DrHouseofSQL

ответ

0

Я в конечном итоге завершив это, используя С заявлением что-то вроде этого:

С

(

Выберите заявление для первого состояние AS blah

S Заявление Избранного для второго условия AS ла

Выберите оператор для третьего условия AS л

Выберите заявление для четвертого условия AS ла

Выберите оператор для пятого состояния AS ла

Выберите заявление для шестого состояния AS blah

Выбирите заявление на седьмое условие AS blah

Выберите заявление для восьмого состояния AS ла

)

выберите

случай, когда (8 случаев на основе 8 выбирают выше

Я просто поместить результаты в таблице и сделал всю математику в Excel

0

Как насчет:

WHERE CASE WHEN (Code for condition A) then 1 else 0 end + 
     CASE WHEN (Code for condition B) then 1 else 0 end + 
     CASE WHEN (Code for condition C) then 1 else 0 end + 
     ... 
     = 5 
+1

Я думаю, что состояние должно быть больше похоже на> = 5. – user2989408

1

Поскольку условия распространяются по строкам, вы можете сделать это путем объединения MAX() и CASE заявление в HAVING статья:

SELECT person_ID 
FROM YourTable 
GROUP BY Person_ID 
HAVING MAX(CASE WHEN ConditionA THEN 1 END) 
    + MAX(CASE WHEN ConditionB THEN 1 END) 
    + MAX(CASE WHEN ConditionC THEN 1 END) 
    + MAX(CASE WHEN ConditionD THEN 1 END) 
    + MAX(CASE WHEN ConditionE THEN 1 END) 
    + MAX(CASE WHEN ConditionF THEN 1 END) 
    + MAX(CASE WHEN ConditionG THEN 1 END) 
    + MAX(CASE WHEN ConditionH THEN 1 END) 
    >= 5 
+0

Как ниже, должно быть> = 5 – rwking

+0

@rwik возможно, но OP утверждает, что «люди, которые соответствуют 5 из 8 условий», не «не менее 5». –

+0

Правда. Это может быть неверно, но я почти думаю, что тот, кто встречает 6 из 8 условий, также отвечает 5 из 8 условий. – rwking

0

Определенная пользователем функция спасения

SELECT * FROM view_people_with_conditions_count WHERE conditions_count BETWEEN 5 AND 8 

CREATE VIEW view_people_with_conditions_count 
AS 
SELECT *, dbo.GetCondtionsCount(id) as conditions_count FROM peoples_table 

CREATE function GetCondtionsCount(@id int) 
RETURNS int 
AS 
BEGIN 
     DECLARE @counter int 

     ' implement your conditions here 
     IF (condtion1) SET @counter = @counter + 1 
     IF (condtion2) SET @counter = @counter + 1 
     IF (condtion3) SET @counter = @counter + 1 
     RETURN @counter 
END 
Смежные вопросы