现在,我有一个 SQL 查询,它以下列方式返回数据:
“SCHOOL”和“TEACHER”列中都有重复值,例如,A 学校和 C 学校都有名为 Ms. Smith 的老师。
我需要以这种方式呈现我的数据:
是否可以直接在 SQL select 语句中执行此类操作(如果不可能,可以使用或不使用动态列名)?我对每种方法的处理方式有什么不同?请给我一些例子好吗?
我最初的选择语句非常复杂,我不想发布它,因为这个问题与其他任何人都无关。所以我问一般来说,一个人会怎么做呢?
这应该这样做:
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
如果您使用的是 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