я следующую таблицу:SSIS/SQL Server - Флаг на основе нескольких столбцов условий
ID | Number | Condition 1 | Condition 2 | Condition 3 | Condition 4
1 | 1 | 1 | 2 | 1 | 1
1 | 2 | 2 | 1 | 2 | 2
2 | 5 | 2 | 2 | 2 | 1
2 | 6 | 2 | 2 | 2 | 2
3 | 7 | 1 | 1 | 2 | 1
3 | 8 | 2 | 1 | 1 | 2
3 | 3 | 2 | 1 | 2 | 2
4 | 9 | 2 | 1 | 1 | 1
4 | 4 | 1 | 1 | 1 | 2
5 | 10 | 2 | 1 | 2 | 1
5 | 13 | 2 | 1 | 2 | 2
(Довольно путаницы, жаль об этом)
Как вы можете видеть, есть несколько идентификаторов. Я должен взять один из каждого ID, исходя из условий. Итак, я хочу проверить каждое условие по одному и добавить столбец на основе результата в моем выходе. Логикой этого является
if (для каждой группы идентификаторов) одна строка имеет
condition
= 1, то это правильный вариант. Если обе строки равны 1 или оба равны 2, тогда мы проверяем следующее условие.
Итак, если мы возьмем только записи с ID 1
, мы можем видеть ID 1 - Number 1
является правильным нам нужно в нашей продукции.
Но если мы возьмем ID 2
, мы увидим, что обе записи имеют одинаковое значение, что не дает нам ответа. В этом случае мы смотрим на condition 2
и реализуем там ту же логику.
(condition 4
ВСЕГДА будет иметь одну запись с '1' для каждого ID)
Так что мой выход будет:
ID | Number | Condition 1 | Condition 2 | Condition 3 | Condition 4 | IsOk
1 | 1 | 1 | 2 | 1 | 1 | 1
1 | 2 | 2 | 1 | 2 | 2 | 2
2 | 5 | 2 | 2 | 2 | 1 | 1
2 | 6 | 2 | 2 | 2 | 2 | 2
3 | 7 | 1 | 1 | 2 | 1 | 1
3 | 8 | 2 | 1 | 1 | 2 | 2
3 | 3 | 2 | 1 | 2 | 2 | 2
4 | 9 | 2 | 1 | 1 | 1 | 2
4 | 4 | 1 | 1 | 1 | 2 | 1
5 | 10 | 2 | 1 | 2 | 1 | 1
5 | 13 | 2 | 1 | 2 | 2 | 2
Любые советы/предложения?
Я буду использовать это в SSIS, поэтому решения в SSIS или чистом SQL-коде для меня все в порядке.
В случае, если кто задается вопросом: Я пробовал с Case
,CASE
when [Condition1] = 1 then 1
else CASE when [Condition2] = 1 then 1
else CASE when [Condition3] = 1 then 1
else CASE when [Condition4] = 1 then 1 END
END
END
END AS IsOk
Но это не дало запрашиваемое результата
будут ли ваши 'значения condition' всегда' 1' или '2' или они просто примеры более сложных данных? – iamdave
Они всегда будут '1' или' 2'. Это просто еще один способ сказать «true' /' fasle »в этом случае – DenStudent
Можете ли вы дать немного больше информации о прецеденте для этой таблицы? Похоже, вы начинаете с таблицы нежелательных измерений или таблицы флагов, где вторая имеет только бит в каждом столбце. –