Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > [MSSQL2005] выбрать одно значение из таблицы


Автор: MishaMW 15.8.2008, 09:01
Есть таблица

IDObj    Account    Obj
15925    1                obj1
15917    2                obj2
18814    3                gayka
14814    3                bolt
18815    4                gayka
14815    4                gayka
18817    5                bolt
14817    5                bolt

Нужно выбрать по одной записи для каждого Account, причем в парах приоритет за Obj=bolt

Автор: aleksh 15.8.2008, 09:44
так вроде было уже...

Автор: MishaMW 15.8.2008, 09:46
Тут не было

Автор: Magnifico 15.8.2008, 14:59
Код

select max(IDObj ),  Account ,   Obj
from table
whrere Obj= 'bolt'
group by Account ,   Obj


Цитата

 причем в парах приоритет за Obj=bolt

довольно тяжело понять смысл этой фразы!

Автор: MishaMW 17.8.2008, 09:36
Цитата(Magnifico @  15.8.2008,  14:59 Найти цитируемый пост)
довольно тяжело понять смысл этой фразы! 


Для каждого Account может существовать больше одной записи. В этом случае выбирается запись где Obj= 'bolt'. 
Если же записей где Obj= 'bolt' в рамках одного Account окажется больше одной, то выбирается любая из них, если ниодной -  вообще любая.

другими словами, из приведенного набора данных должно получиться следующее

IDObj    Account    Obj
15925    1                obj1
15917    2                obj2
14814    3                bolt
18815    4                gayka
18817    5                bolt

Автор: Magnifico 17.8.2008, 18:25
Код

create table #t
(
IDObj int,
Account  int,
Obj nvarchar(25)
)
--------------------------
insert #t
select 15925,  1 , 'obj1' union all
select 15917 ,   2 ,  'obj2' union all
select 18814 ,   3 ,   'gayka' union all
select 14814 ,   3  ,  'bolt' union all
select 18815 ,   4  ,  'gayka' union all
select 14815 ,   4  ,  'gayka' union all
select 18817 ,   5 ,   'bolt' union all
select 14817 ,   5 ,   'bolt' 
------------------------------------
select max(IDObj), account ,Obj
from
(
    select distinct coalesce(t2.IDObj,t1.IDObj) as IDObj,coalesce(t2.account,t1.account) as account ,
    coalesce(t2.Obj,t1.Obj)as Obj
    from #t t1

left join
    (
    select *
    from #t 
    where obj ='bolt'
    ) as t2
on t1.account =t2.account
) as q
group by account ,Obj
order by account


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)