2011-02-28 43 views
2

我有一個很大的數據視圖。對於包含相關信息的兩列,我想摺疊數據,所以我沒有空白。一個例子可能會更好地表明我的意思。收起行兩列

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 

謝謝您的幫助!

回答

1
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

的SQL Server 2005+ – RichardTheKiwi 2011-02-28 12:16:56

+0

非常感謝您的幫助!它真的救了我! – Paul 2011-02-28 13:33:53

-1
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