Побитовые операции подобно агрегатным функциям

Vasily
Дата: 02.10.2000 11:09:57
Возможно ли над столбцом типа bit выполнить побитовую операцию "и" или "или" подобно агрегатным функциям, не используя курсоры?
Ольга
Дата: 02.10.2000 12:55:19
Вообще-то, если требуется просто узнать значение такой операции над стобцом в пределах всей! таблицы, то достаточно сделать выборку с условием BitColumn=0 для "И" и BitColumn=1 для "ИЛИ". Если же требуется именно агрегатная функция с группировкой, то
можно предложить такой извращенный способ:
Для И -
select case
when count(case BitColumn
when 0 then 1
else NULL
end)>0
then 0
else 1
end
from ......

Для ИЛИ аналогично -
select case
when count(case BitColumn
when 1 then 1
else NULL
end)>0
then 0
else 1
end
from ......



Только не нужно забывать о том, что в 7.0 битовые столбцы могут содержать значения NULL ;) На них наша "булева алгебра" зуб-то и сломает.
Vasily
Дата: 02.10.2000 13:47:49
ОК, спасибо.

Только можно, если не трудно примерчик выборки в пределах всей таблицы, использую BitColumn, а то я чего-то в хелпе ничего про этот BitColumn не нашел :(
Vasily
Дата: 02.10.2000 13:49:36
Сорри, стормозил...
Можно не писать пример. Воспринял это bitcolumn как ключевое слово сначала :)))))
Ольга
Дата: 02.10.2000 13:55:37
BitColumn - это просто название столбца для примера. Вместо него надо подставлять название своего битового столбца. Пусть тогда уж BitTable - это название таблицы для примера (подставляем свое! :). Тогда получаем:

select OR_value=case when count(*)>0 then 1
else 0
end
from BitTable
where BitColumn=1

select AND_value=case when count(*)>0 then 0
else 1
end
from BitTable
where BitColumn=0
Ольга
Дата: 02.10.2000 13:57:02
Поздно, поезд ушел %)
Vasily
Дата: 06.10.2000 09:06:17
2Olga:

Небольшой недочет в первом ответе. Там надо так:
Для ИЛИ аналогично -

select case
when count(case BitColumn
when 1 then 1
else NULL
end)>0
then <b>1</b>
else <b>0</b>
end
from ......