如何将行转换为具有多个行和null的列

时间:2018-11-30 04:20:56

标签: sql sql-server tsql

我希望您能在这方面帮助我: 我想创建一个查询,以便将表的记录作为列,但是此列可以有多行。

示例:

| Id | Value  | ColumnName    |
| 1  | A      | Q1            |
| 2  | B      | Q2            |
| 3  | C      | Q2            |
| 4  | D      | Q2            |
| 5  | E      | Q3            |
| 6  | F      | Q3            |

这就是我想要的:

| Q1   | Q2   | Q3
| A    | B    | E 
| NULL | C    | F    
| NULL | D    | NULL 

如何在一个查询中获得此结果? (我确实需要在查询中添加它,因为我需要为此创建一个视图)

感谢和问候!

2 个答案:

答案 0 :(得分:3)

您可以对row_number()使用条件聚合:

select max(case when columnname = 'Q1' then value end) as q1,
       max(case when columnname = 'Q2' then value end) as q2,
       max(case when columnname = 'Q3' then value end) as q3       
from (select t.*,
             row_number() over (partition by columnname order by id) as seqnum
      from t
     ) t
group by seqnum;

答案 1 :(得分:1)

您可以尝试使用数据透视

foreach (var chr in data.Distinct())
{
    al.Add($"{chr} ({(int) chr}) {data.Count(c => c == chr)}");
}