Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Знаю, что криво, а по-другому не умею  [new]
Бредогенератор
Member

Откуда:
Сообщений: 776
Научите, пожалуйста, умные люди!

declare @payers table
(
    payer_id int,
    payer_type_id int
)
--связь по payer_id = subj_id
declare @subjects table
(
    subj_id int,
    subj_txt varchar(100)
)
----данные
insert into @payers
select 111, 1 union all
select 222, 2

insert into  @subjects
select 111, 'Первый' union all
select 222, 'Второй' union all
select 1,   'Добрый' union all
select 2,   'Злой'

----в процедуре:
declare @payer_id int
set @payer_id = 111 ---входной параметр. Результатом для него должен быть текст "Первый"
--set @payer_id = 222 ---входной параметр. Результатом для него должен быть текст "Злобный Второй"

declare @payer_type_id int
select @payer_type_id = payer_type_id from @payers where payer_id = @payer_id 

declare @text4uotput varchar(200)

---далее надо как-то покрасивей вывести текст из @subjects
--таким образом, что если payer_type_id = 1, то вмете с названием типа, иначе просто текст

IF @payer_type_id = 1
select @text4uotput = subj_txt from @subjects where subj_id = @payer_id
ELSE 
select @text4uotput = 
(select subj_txt from @subjects where subj_id = @payer_type_id) 
+ ' ' +
(select subj_txt from @subjects where subj_id = @payer_id)

select @text4uotput
18 май 11, 15:24    [10672057]     Ответить | Цитировать Сообщить модератору
 Re: Знаю, что криво, а по-другому не умею  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Бредогенератор,


SELECT ISNULL(s1.subj_txt+' ','') + s.subj_txt 
FROM @subjects s 
left JOIN @payers p ON p.payer_id = s.subj_id
left JOIN @subjects s1 ON s1.subj_id = p.payer_type_id AND s1.subj_id = 2 
where s.subj_id = @payer_id
18 май 11, 16:04    [10672540]     Ответить | Цитировать Сообщить модератору
 Re: Знаю, что криво, а по-другому не умею  [new]
s.w.a.n.
Member

Откуда: Москва
Сообщений: 137
Бредогенератор,
не вполне ясно что должно быть результатом,
если это
111	Добрый Первый
222	Злой Второй
333	Третий
444	Глупый 
то, как вариант:
create table #payers
(
    payer_id int,
    payer_type_id int
)

create table #subjects
(
    subj_id int,
    subj_txt varchar(100)
)
----данные
insert #payers(payer_id,payer_type_id)
select 111, 1 union all
select 222, 2 union all
select 333, 3 union all
select 444, 4

insert #subjects(subj_id,subj_txt)
select 111, 'Первый' union all
select 222, 'Второй' union all
select 333, 'Третий' union all
select 1,   'Добрый' union all
select 2,   'Злой'   union all
select 4,   'Глупый' union all
select 5,   'Умный'

select x.pid,ltrim(tt2+' ' +tt1) Fulltext
from
(
select payer_id pid, payer_type_id ptid1, isnull(b.subj_txt,'') tt1 from #payers a left join #subjects b on a.payer_id=b.subj_id
) x left join
(
select a.payer_type_id ptid2, isnull(b.subj_txt,'') tt2  from #payers a left join #subjects b on a.payer_type_id=b.subj_id
) y
on x.ptid1 = y.ptid2

----------------
DROP TABLE #payers
DROP TABLE #subjects
18 май 11, 16:07    [10672582]     Ответить | Цитировать Сообщить модератору
 Re: Знаю, что криво, а по-другому не умею  [new]
Бредогенератор
Member

Откуда:
Сообщений: 776
s.w.a.n., забыл уточнить, что название типа обязательное.
18 май 11, 16:14    [10672650]     Ответить | Цитировать Сообщить модератору
 Re: Знаю, что криво, а по-другому не умею  [new]
Бредогенератор
Member

Откуда:
Сообщений: 776
Ребят, а внешние джойны лучше, чем условия ли зависит...?
18 май 11, 16:16    [10672666]     Ответить | Цитировать Сообщить модератору
 Re: Знаю, что криво, а по-другому не умею  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Бредогенератор
Ребят, а внешние джойны лучше, чем условия ли зависит...?


чего?
18 май 11, 16:18    [10672693]     Ответить | Цитировать Сообщить модератору
 Re: Знаю, что криво, а по-другому не умею  [new]
iljy
Member

Откуда:
Сообщений: 8711
Бредогенератор,

select ISNULL(s2.subj_txt + ' ','') + s1.subj_txt from 
@payers p join @subjects s1 on p.payer_id = s1.subj_id
	left join @subjects s2 on s2.subj_id = nullif(p.payer_type_id,1)
where payer_id = @payer_id
18 май 11, 16:22    [10672738]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить