SQL-сервер 2000:Возвращает «истину» или «ложь» в зависимости от того, что любой 1 из 25 столбцов является «истиной».

StackOverflow https://stackoverflow.com/questions/1615780

Вопрос

Мне нужно создать запрос, который проверяет несколько разных столбцов, и если в каком-либо из них есть 1, я хочу вернуть true.

Идеальный результат будет примерно таким:

ID:55
Имя: Джон Доу
ИсДилерТип1: Истина
ИсДилерТип2: Верно
ИсДилерТип3: Ложь
ИсДилерТип4: Ложь
IsDealerType5: Правда

Проблема в том, что вместо этих 5 столбцов дилеров у меня есть около 20 столбцов с именами 1a, 1b, 1c, 1d и т. д.Если любой из столбцов «1» имеет значение true, то IsDealerType1 должно иметь значение true.

Я стараюсь не писать что-то в коде VB.NET для проверки каждого столбца только потому, что этого явного уродства легко избежать в SQL - если бы я только знал, как это сделать - но я не уверен, как чтобы построить запрос.Я пробовал такие вещи, как...

SELECT id, 
      name, 
      (1a or 1b or 1c or 1d) as IsDealerType1, 
      (2a or 2b or 2c or 2d) as IsDealerType2 
where id = 55

...но, очевидно, я делаю это неправильно.

Любая помощь приветствуется.Спасибо!

Это было полезно?

Решение

Мне нравится Рассел, но я добавлю еще вот что:

CASE WHEN 1 IN (1a,1b,1c,1d) THEN 1 ELSE 0 END As IsDealerType1

Другие советы

СЛУЧАЙ, КОГДА (1a + 1b + 1c + 1d) > 0, ТОГДА 1 ELSE 0 КОНЕЦ как IsDealerType1

Используйте SQL побитовое ИЛИ оператор.Избегает сравнений и приведения.

Пример:Ответы Джоэла передают клиенту целое число 1 или 0, где вы, вероятно, ожидаете бит (логическое значение).Ответы Ремуса требуют сравнения и сравнения.

SELECT id, 
      name, 
      (1a | 1b | 1c | 1d) as IsDealerType1, 
      (2a | 2b | 2c | 2d) as IsDealerType2 
where id = 55

В SQL типы BIT нельзя использовать в логических выражениях (ох!!), их нужно сравнивать с целыми числами:

SELECT id, name, 
   cast(
    case when ([1a]=1 or [1b]=1 or [1c]=1 or [1d]=1) then 1 else 0 end
    as bit) as IsDealerType1,
    cast(case when ([2a]=1 or [2b]=1 or [2c]=1 or [2d]=1) then 1 else 0 end
    as bit) as IsDealerType2 
from [table]
where id = 55
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top