0

现在,我有一个 SQL 查询,它以下列方式返回数据: 我有的

“SCHOOL”和“TEACHER”列中都有重复值,例如,A 学校和 C 学校都有名为 Ms. Smith 的老师。

我需要以这种方式呈现我的数据:

我想要的是

是否可以直接在 SQL select 语句中执行此类操作(如果不可能,可以使用或不使用动态列名)?我对每种方法的处理方式有什么不同?请给我一些例子好吗?

我最初的选择语句非常复杂,我不想发布它,因为这个问题与其他任何人都无关。所以我问一般来说,一个人会怎么做呢?

4

2 回答 2

0

这应该这样做:

select School, 
sum(case Teacher = 'Ms. Smith' then [# Students] else 0 end) as [Ms. Smith],
sum(case Teacher = 'Mr. Rogers' then [# Students] else 0 end) as [Mr. Rogers],
sum(case Teacher = 'Mr. Berkenheim' then [# Students] else 0 end) as [Mr. Berkenheim],
sum(case Teacher = 'Ms. Roberts' then [# Students] else 0 end) as [Ms. Roberts]
group by School
于 2013-07-30T20:06:15.623 回答
0

如果您使用的是 SQL Server 2005 或更高版本,则可以使用 PIVOT 运算符。像这样的东西:

SELECT
    School,
    [Ms. Smith],
    [Mr. Rogers],
    [Mr. Berkenheim],
    [Ms. Roberts],
    [Mr. Ashby],
    [Ms. Robinson]
FROM <data_table> AS D
PIVOT (
    SUM(NumberOfStudents) FOR Teacher IN ([Ms. Smith],[Mr. Rogers],[Mr. Berkenheim],[Ms. Roberts],[Mr. Ashby],[Ms. Robinson])
) P
于 2013-07-30T20:20:34.703 回答