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

Откуда:
Сообщений: 2083
Есть таблица
idxw1w2w3
10АпельсинNULLNULL
10NULLБананNULL
10NULLNULLВиноград
20МорковьNULLNULL
20NULLЛукЧеснок
20NULLОгурецNULL
20NULLNULLПомидор
20NULLРепаNULL

Надо по максимому избавиться от NULL и получить такой результат (сортировка неважна)
idxw1w2w3
10АпельсинБананВиноград
20МорковьЛукЧеснок
20NULLОгурецПомидор
20NULLрепаNULL

версия SQL 2008 R2

Исходные данные
declare @t table (idx int, w1 varchar(50), w2 varchar(50), w3 varchar(50))
insert @t values (10, 'Апельсин',null,null), (10,null,'Банан',null), (10,null,null,'Виноград'), (20,'Морковь',null,null), (20,null,'Лук','Чеснок'),
(20,null,'Огурец',null), (20,null,null,'Помидор'), (20,null,'Репа',null)

select * from @t
13 апр 16, 17:46    [19053115]     Ответить | Цитировать Сообщить модератору
 Re: Интересный запрос  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
group by чем не угодил?
13 апр 16, 17:50    [19053143]     Ответить | Цитировать Сообщить модератору
 Re: Интересный запрос  [new]
TaPaK
Member

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

SELECT 
	IdX,
	MAX(w1),
	MAX(w2),
	MAX(w3)
FROM @t
GROUP BY IDX
13 апр 16, 17:56    [19053180]     Ответить | Цитировать Сообщить модератору
 Re: Интересный запрос  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
with cte_w1
as
(
select row_number() over (partition by idx order by w1) id, idx, w1 from @t
where w1 is not null
)
, cte_w2
as
(
select row_number() over (partition by idx order by w2) id, idx, w2 from @t
where w2 is not null
)
,cte_w3
as
(
select row_number() over (partition by idx order by w3) id, idx, w3 from @t
where w3 is not null
)

select coalesce(w1.idx,w2.idx,w3.idx) idx, w1, w2, w3 
  from cte_w1 w1
    full join cte_w2 w2
      on w1.id = w2.id and w1.idx = w2.idx
    full join cte_w3 w3
      on w2.id = w3.id and w2.idx = w3.idx
13 апр 16, 17:59    [19053193]     Ответить | Цитировать Сообщить модератору
 Re: Интересный запрос  [new]
user89
Member

Откуда:
Сообщений: 2083
Konst_One, TaPaK

group by даст только 2 строчки   Ещё пробовал через row_number и т.д., не вышло...
Уверен, решение простое, под конец дня не могу сообразить.
13 апр 16, 18:01    [19053198]     Ответить | Цитировать Сообщить модератору
 Re: Интересный запрос  [new]
user89
Member

Откуда:
Сообщений: 2083
Knyazev Alexey,

работает правильно. Спасибо!
13 апр 16, 18:05    [19053215]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить