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

select 'dvdfg' col1, 'dfgdfg' col2, '' col3, '' col4, '' col5, 'fghg' col6 union all
select 'jmhj' col1, '' col2, 'fghgf' col3, '' col4, 'bfdbd' col5, '' col6 union all
select 'bfbfd4' col1, 'bhbgh' col2, '565hg' col3, '' col4, '' col5, '' col6 union all
select '234ffr' col1, '' col2, '' col3, '' col4, '6g5tr' col5, 'bghjt6' col6 union all
select 'fc656' col1, '' col2, 'gbhhg' col3, '' col4, 'bgfhjg' col5, 'fbfgb' col6 



Надо получить такое:

select 'dvdfg' col1, 'dfgdfg' col2, 'fghg' col3, '' col4, '' col5, '' col6 union all
select 'jmhj' col1, 'fghgf' col2, 'bfdbd' col3, '' col4, '' col5, '' col6 union all
select 'bfbfd4' col1, 'bhbgh' col2, '565hg' col3, '' col4, '' col5, '' col6 union all
select '234ffr' col1, '6g5tr' col2, 'bghjt6' col3, '' col4, '' col5, '' col6 union all
select 'fc656' col1, 'gbhhg' col2, 'bgfhjg' col3, 'fbfgb' col4, '' col5, '' col6 
3 сен 12, 23:59    [13109059]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение данных в колонках.  [new]
aleks2
Guest
select (select c from (select *, row_number() over(order by c desc, n asc) nn
                              from 
                                ( select col1 c, 1 n union all select col2, 2 n union all select col3, 3 n union all select col4, 4 n union all select col5, 5 n union all select col6, 6 n) z
                      ) zz
                 where nn = 1
       ) col1
     , (select c from (select *, row_number() over(order by c desc, n asc) nn
                              from 
                                ( select col1 c, 1 n union all select col2, 2 n union all select col3, 3 n union all select col4, 4 n union all select col5, 5 n union all select col6, 6 n) z
                      ) zz
                 where nn = 2
       ) col2
     , (select c from (select *, row_number() over(order by c desc, n asc) nn
                              from 
                                ( select col1 c, 1 n union all select col2, 2 n union all select col3, 3 n union all select col4, 4 n union all select col5, 5 n union all select col6, 6 n) z
                      ) zz
                 where nn = 3
       ) col3
     , (select c from (select *, row_number() over(order by c desc, n asc) nn
                              from 
                                ( select col1 c, 1 n union all select col2, 2 n union all select col3, 3 n union all select col4, 4 n union all select col5, 5 n union all select col6, 6 n) z
                      ) zz
                 where nn = 4
       ) col4
-- ну, дальше понятно что

from(
select 'dvdfg' col1, 'dfgdfg' col2, '' col3, '' col4, '' col5, 'fghg' col6 union all
select 'jmhj' col1, '' col2, 'fghgf' col3, '' col4, 'bfdbd' col5, '' col6 union all
select 'bfbfd4' col1, 'bhbgh' col2, '565hg' col3, '' col4, '' col5, '' col6 union all
select '234ffr' col1, '' col2, '' col3, '' col4, '6g5tr' col5, 'bghjt6' col6 union all
select 'fc656' col1, '' col2, 'gbhhg' col3, '' col4, 'bgfhjg' col5, 'fbfgb' col6 
) x
4 сен 12, 05:40    [13109416]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение данных в колонках.  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Какие интересные академические непрактичные задачки.
4 сен 12, 09:29    [13109590]     Ответить | Цитировать Сообщить модератору
 Re: Перемещение данных в колонках.  [new]
Anddros
Member

Откуда:
Сообщений: 1077
declare @t table (col1 varchar(10), col2 varchar(10), col3 varchar(10), col4 varchar(10), col5 varchar(10), col6 varchar(10))
insert @t 
select 'dvdfg' col1, 'dfgdfg' col2, '' col3, '' col4, '' col5, 'fghg' col6 union all
select 'jmhj' col1, '' col2, 'fghgf' col3, '' col4, 'bfdbd' col5, '' col6 union all
select 'bfbfd4' col1, 'bhbgh' col2, '565hg' col3, '' col4, '' col5, '' col6 union all
select '234ffr' col1, '' col2, '' col3, '' col4, '6g5tr' col5, 'bghjt6' col6 union all
select 'fc656' col1, '' col2, 'gbhhg' col3, '' col4, 'bgfhjg' col5, 'fbfgb' col6 

select [1],[2],[3],[4],[5],[6]
from (
select rn, c, row_number()over(partition by rn order by n)rn2
from (select *,row_number()over(order by (select 1))rn from @t)t
unpivot (c for n in ([col1],[col2],[col3],[col4],[col5],[col6]))tt
where c>''
)t
pivot (max(c) for rn2 in ([1],[2],[3],[4],[5],[6]))tt
4 сен 12, 09:49    [13109647]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить