将数据从多行移动到 SQL 服务器中的单行

Move data from multiple rows to a single row in SQL Server

我有一个 table 如下所示-

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;

请帮忙。

试试这个:

 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 将 return NULL。

SELECT F1, MAX(CASE WHEN F2 = 'NA' THEN '' ELSE F2 END) AS F2 MAX(CASE WHEN F3 = 'NA' THEN '' ELSE F3 END) AS F2 MAX(CASE WHEN F4 = 'NA' THEN '' ELSE F4 END) AS F2 从测试 按 F1 分组;