将数据从多行移动到SQL Server中的单个行

时间:2015-01-07 18:45:38

标签: sql sql-server

我有一张桌子如下图所示 -

F1  F2  F3  F4  
A   AB  NA  NA  
A   NA  BC  NA  
A   NA  NA  CD  
B   UV  NA  NA  
B   NA  WX  NA  
B   NA  NA  YZ  
C   ABC NA  NA  
C   NA  BCD NA  
C   NA  NA  XYZ  

我需要按列F1进行分组,并选择不等于' NA'的连续列的值。

F1  F2  F3  F4  
A   AB  BC  CD  
B   UV  WX  YZ  
C   ABC BCD XYZ

我正在使用以下代码,但它无法正常工作。

 SELECT   F1
,MAX(ISNULL(F2 ,'')) as F2   
,MAX(ISNULL(F3 ,'')) as F3   
,MAX(ISNULL(F4 ,'')) as F4   
     FROM test
     group by F1;

请帮忙。

2 个答案:

答案 0 :(得分:2)

试试这个:

 SELECT   F1
,MAX(ISNULL(NULLIF(F2, 'NA') ,'')) as F2   
,MAX(ISNULL(NULLIF(F3, 'NA') ,'')) as F3   
,MAX(ISNULL(NULLIF(F4, 'NA') ,'')) as F4   
     FROM test
     group by F1;

请注意,如果第一个参数的值与第二个参数的值相同,则NULLIF将返回NULL。

答案 1 :(得分:0)

选择F1,     MAX(F2 =' NA'然后''' ELSE F2 END)作为F2     MAX(F3 =' NA'然后'' ELSE F3结束)作为F2的情况     MAX(F4 =' NA'然后'' ELSE F4 END)作为F2的情况 从测试 GROUP BY F1;