2014-12-02 52 views
1

希望有人能帮助我。 我有这样的数据表:T-SQL Pivot - 种类

Form Section Data1 Data2 Data3 Data4 
----------------------------------------- 
1001 0000001 Data_ Null_ Null_ Null_ 
1001 0000002 Null_ Data_ Null_ Null_ 
1001 0000003 Null_ Null_ Data_ Null_ 
1001 0000004 Null_ Null_ Null_ Data_ 
1002 0000001 Data_ Null_ Null_ Null_ 
1002 0000002 Null_ Data_ Null_ Null_ 
1002 0000003 Null_ Null_ Data_ Null_ 
1002 0000004 Null_ Null_ Null_ Data_ 

我想提出它在一个表像这样:

Form Data1 Data2 Data3 Data4 
-------------------------------- 
1001 Data_ Data_ Data_ Data_ 
1002 Data_ Data_ Data_ Data_ 

我敢肯定,这是比较简单的,但是我已经圆并且看着这个,现在每次尝试我都会返回一个与我开始时相同的列表!这几乎炸毁了我的大脑! 任何帮助将不胜感激。 谢谢。

+2

看起来你可以通过'Form'柱扔围绕每个'Data'柱('max' /'min')和基团的聚合函数。 – Taryn 2014-12-02 15:59:53

回答

1

所有你需要的是conditional aggregate。考虑到这些都不是DB NULL's

SELECT Form, 
     Max(CASE 
      WHEN Data1 = 'Data_' THEN Data1 
      END), 
     Max(CASE 
      WHEN Data2 = 'Data_' THEN Data2 
      END), 
     Max(CASE 
      WHEN Data3 = 'Data_' THEN Data3 
      END), 
     Max(CASE 
      WHEN Data4 = 'Data_' THEN Data4 
      END) 
FROM <tablename> 
GROUP BY form 

,或者如果你只有这些数据集(IE)的唯一NULL_Data_那就试试这个。

select Form ,Min(Data1),Min(Data2),Min(Data3),Min(Data4) 
FROM <tablename> 
GROUP BY form 

SQL FIDDLE DEMO