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

Откуда:
Сообщений: 6
Уважаемые форумчане, возможно ли такое и как?

Есть таблица
Id IdUpdtd ru en
1 NULL аааа fffff
2 NULL вввв NULL
3 1 сссс NULL

Каким запросом можно получить вот такой результирующий набор?
Id Word
1 fffff
2 вввв
3 аааа

Огромное спасибо.
19 июл 18, 15:51    [21585540]     Ответить | Цитировать Сообщить модератору
 Re: COALESCE ?  [new]
Посетитель
Member

Откуда:
Сообщений: 1209
Leoooo,

проще всего так

with a(Id,Word) as
(select 1,'fffff'
union all select 2,'вввв'
union all select 3,	'аааа')
select * from a


остальные варианты предполагают телепатию
19 июл 18, 15:54    [21585551]     Ответить | Цитировать Сообщить модератору
 Re: COALESCE ?  [new]
iap
Member

Откуда: Москва
Сообщений: 46979
SELECT Id, Word=ISNULL(en,ru) FROM [Есть таблица];
Не понял только, почему для Id=3 должно получиться 'aaaa'.
19 июл 18, 16:11    [21585592]     Ответить | Цитировать Сообщить модератору
 Re: COALESCE ?  [new]
Leoooo
Member

Откуда:
Сообщений: 6
Посетитель,
как-то совсем просто - проще строить таблицы подобные результирующему набору.
К чему запросы?
Вопрос был другой и смысл:
Если en не NULL выбираем en
Если en NULL,
то
если IdUpdtd не NULL выбираем ru у которого Id=IdUpdtd
если IdUpdtd NULL выбираем ru с тем же Id
19 июл 18, 16:13    [21585601]     Ответить | Цитировать Сообщить модератору
 Re: COALESCE ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Leoooo,

автор
Вопрос был другой и смысл:
Если en не NULL выбираем en
Если en NULL,
то
если IdUpdtd не NULL выбираем ru у которого Id=IdUpdtd
если IdUpdtd NULL выбираем ru с тем же Id

фантастика, вам бы детективы писать
19 июл 18, 16:17    [21585616]     Ответить | Цитировать Сообщить модератору
 Re: COALESCE ?  [new]
Посетитель
Member

Откуда:
Сообщений: 1209
Leoooo,

with a(Id,IdUpdtd,ru,en) as
(         select 1,NULL,'аааа','fffff'
union all select 2,NULL,'вввв',NULL
union all select 3,1   ,'сссс',NULL
)
select a.id,coalesce(a.en,b.ru,a.ru) word
  from a
  left join a b
    on b.id = a.idUpdtd
19 июл 18, 16:24    [21585645]     Ответить | Цитировать Сообщить модератору
 Re: COALESCE ?  [new]
Leoooo
Member

Откуда:
Сообщений: 6
Посетитель,
YES
COOL
Спасибо огромное!
Только зачем WITH?
19 июл 18, 16:31    [21585665]     Ответить | Цитировать Сообщить модератору
 Re: COALESCE ?  [new]
Leoooo
Member

Откуда:
Сообщений: 6
TaPaK, сам пиши.
А так смотри ответ от Посетитель.
19 июл 18, 16:34    [21585672]     Ответить | Цитировать Сообщить модератору
 Re: COALESCE ?  [new]
Посетитель
Member

Откуда:
Сообщений: 1209
Leoooo
Только зачем WITH?


no comments
19 июл 18, 16:39    [21585689]     Ответить | Цитировать Сообщить модератору
 Re: COALESCE ?  [new]
Leoooo
Member

Откуда:
Сообщений: 6
Посетитель,
select a.id,coalesce(a.en,b.ru,a.ru) word
from [Есть таблица] a
left join [Есть таблица] b
on b.id = a.idUpdtd
19 июл 18, 16:44    [21585711]     Ответить | Цитировать Сообщить модератору
 Re: COALESCE ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
как занимательно, спасибо что внесл свет в эту тёмную пещеру
19 июл 18, 16:45    [21585715]     Ответить | Цитировать Сообщить модератору
 Re: COALESCE ?  [new]
Посетитель
Member

Откуда:
Сообщений: 1209
Leoooo,

у меня с ошибкой падает

Msg 208, Level 16, State 1, Line 1
Invalid object name 'Есть таблица'.
19 июл 18, 16:47    [21585728]     Ответить | Цитировать Сообщить модератору
 Re: COALESCE ?  [new]
Leoooo
Member

Откуда:
Сообщений: 6
Посетитель,

)))))
19 июл 18, 16:51    [21585747]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить