Свернуть строки для двух столбцов - PullRequest
2 голосов
/ 28 февраля 2011

У меня большое представление с данными.Для двух столбцов, содержащих связанную информацию, я хотел бы свернуть данные, чтобы у меня не было пробелов.Пример, вероятно, лучше показал бы, что я имею в виду.

    ID  Title   Column1 Column2
   -11  Row1    NULL    Anna
   -11  Row1    Lars    NULL
   -10  Row2    NULL    Thomas
    -9  Row3    Paul    NULL
    -7  Row4    Gerald  NULL
    -6  Row5    NULL    Micha
    -6  Row5    NULL    Hans
    -6  Row5    NULL    Robert
    -6  Row5    Rene    NULL
    -6  Row5    Olga    NULL
    -6  Row5    Markus  NULL
    -6  Row5    Klaus   NULL
    -6  Row5    Sascha  NULL

И я хотел бы свернуть пробелы, поэтому это выглядит так:

    ID  Title   Column1 Column2
   -11  Row1    Lars    Anna
   -10  Row2    NULL    Thomas
    -9  Row3    Paul    NULL
    -7  Row4    Gerald  NULL
    -6  Row5    Rene    Micha
    -6  Row5    Olga    Hans
    -6  Row5    Markus  Robert
    -6  Row5    Klaus   NULL
    -6  Row5    Sascha  NULL

Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 28 февраля 2011
declare @t table (ID int, Title varchar(10), Column1 varchar(10), Column2 varchar(10))
insert @t select
   -11  ,'Row1',    NULL    ,'Anna' union all select
   -11  ,'Row1',    'Lars'  ,  NULL union all select
   -10  ,'Row2',    NULL    ,'Thomas' union all select
    -9  ,'Row3',    'Paul'  ,  NULL union all select
    -7  ,'Row4',    'Gerald',  NULL union all select
    -6  ,'Row5',    NULL    ,'Micha' union all select
    -6  ,'Row5',    NULL    ,'Hans' union all select
    -6  ,'Row5',    NULL    ,'Robert' union all select
    -6  ,'Row5',    'Rene'    ,NULL union all select
    -6  ,'Row5',    'Olga'    ,NULL union all select
    -6  ,'Row5',    'Markus'  ,NULL union all select
    -6  ,'Row5',    'Klaus'   ,NULL union all select
    -6  ,'Row5',    'Sascha'  ,NULL

-- the above merely sets up a table variable @t. Replace @t in the below portion
-- with your table name. Below is the actual query

;with a as (
select *,
rn1=row_number() over (partition by title order by column1)
from @t
where column1 is not null
), b as (
select *,
rn2=row_number() over (partition by title order by column2)
from @t
where column2 is not null
)
select a.id, a.title, a.column1, b.column2, *
from a
full join b
on a.title = b.title and a.rn1=b.rn2
where coalesce(a.column1, b.column2) is not null
order by coalesce(a.title, b.title), a.rn1, b.rn2
0 голосов
/ 28 февраля 2011
select id, title, column1, column2
from my_view
where column1 is not null and column2 is not null
union
select max(id) as id, max(title) as title, column1, column2
from my_view as v1
inner join my_view as v2 on v1.id = v2.id
where column1 is null or column2 is null
group by column1, column2

order by id, title, column1, column2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...