powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / побитовое ИЛИ (OR)
7 сообщений из 7, страница 1 из 1
побитовое ИЛИ (OR)
    #32055204
Здравствуйте всем!

След. проблема
есть таблица
ID | Value
81 | 1
81 | 7
82 | 5
81 | 3

Необходимо на выходе получить
ID | Value
81 | 7
82 | 5

То есть
1. Сгруппировать по ID
2. А для значений произвести побитовое ИЛИ (OR)

Подскажите пожалуста, как это можно сделать без курсоров.
Как сделать на курсорах я сам знаю.

Дмитрий
...
Рейтинг: 0 / 0
побитовое ИЛИ (OR)
    #32055209
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а сервер sql 2000?
...
Рейтинг: 0 / 0
побитовое ИЛИ (OR)
    #32055214
Извините забыл
SQL 2000
...
Рейтинг: 0 / 0
побитовое ИЛИ (OR)
    #32055234
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Написать функцию, которая бы давала считала OR для конкретного ID. Написать можно по принципу select @V=@V OR Value from tbl where ID=@ID

2.Для любителей извращений:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
declare @t table( id int, value int)
insert @t select  81 ,  1  union select  81 ,  7  union select  82 ,  5  union select  81 ,  3 

select * from @t

select id,  8 *(case when sum(value &  8 )> 0  then  1  else  0  end)+
            4 *(case when sum(value &  4 )> 0  then  1  else  0  end)+  
            2 *(case when sum(value &  2 )> 0  then  1  else  0  end)+  
            1 *(case when sum(value &  1 )> 0  then  1  else  0  end) 
from @t group by id

естественно это будет работать с числами меньше 16. Иначе нужно количество строчек увеличивать до количества бит в сравниваемом числе
...
Рейтинг: 0 / 0
побитовое ИЛИ (OR)
    #32055246
genial'no !!!!!

Spasibo ogromnoe !!!
...
Рейтинг: 0 / 0
побитовое ИЛИ (OR)
    #32055256
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create table t (id int ,val int)
insert into #t
select  81 , 1 
union all 
select  81 , 7  
union all 
select  82 , 5  
union all 
select  81 , 3 

create function dbo.myfunc( @id int)
returns int
as 
begin
  declare @i int
  select @i=isnull(@i, 0 )|val from t where id=@id
  return @i
end
go
select didtinct id,dbo.myfunc(id) val
from t
...
Рейтинг: 0 / 0
побитовое ИЛИ (OR)
    #32055278
Фотография akuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из разряда очевидное-невероятное (для любителей извращений :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
create table #t (
  id int,
  value int
)

insert into #t values ( 81 , 2 )
insert into #t values ( 81 , 6 )
insert into #t values ( 82 , 5 )
insert into #t values ( 81 , 3 )

declare @id int, @value int

select id, value 
into #t1
from #t
order by id, value

set @value =  0 
set @id =  0 

select * from #t

update #t1 set
	#t1.value = @value,
	@value = CASE @id WHEN #t1.id THEN @value | t.value ELSE t.value END ,
	@id = #t1.id
from #t t
where t.id = #t1.id
	and t.value = #t1.value

select id, max(value)
from #t1
group by id

drop table #t
drop table #t1

Но зато никаких подселектов, хотя вариант MiCe мне больше нравится. Попробуйте на миллионе записей, сравните производительность.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / побитовое ИЛИ (OR)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]