如何在sql中透视表

如何在sql中透视表,sql,pivot,Sql,Pivot,我创建了一个表,如下所示: create table stud(sname nvarchar(10), hr nvarchar(30), dt int,att varchar(3)) insert into stud values ('Abi', '1', '21/01/2013','a') insert into stud values ('Abi', '2', '21/01/2013','p') insert into stud values ('bala', '1',

我创建了一个表,如下所示:

create table stud(sname nvarchar(10), hr nvarchar(30),  dt int,att varchar(3))
insert into stud values ('Abi',  '1',  '21/01/2013','a')
insert into stud values ('Abi',  '2',  '21/01/2013','p')


insert into stud values ('bala',  '1',  '21/01/2013','p')
insert into stud values ('bala',  '2',  '21/01/2013','a')


insert into stud values ('bala',  '1',  '22/01/2013','od')
insert into stud values ('bala',  '2',  '22/01/2013','ml')

insert into stud values ('Abi',  '1',  '22/01/2013','ml')
insert into stud values ('Abi',  '2',  '22/01/2013','od')
我插入的值如下所示:

insert into stud values ('Abi',  '1',  '21/01/2013','a')
insert into stud values ('Abi',  '2',  '21/01/2013','p')


insert into stud values ('bala',  '1',  '21/01/2013','p')
insert into stud values ('bala',  '2',  '21/01/2013','a')


insert into stud values ('bala',  '1',  '22/01/2013','od')
insert into stud values ('bala',  '2',  '22/01/2013','ml')

insert into stud values ('Abi',  '1',  '22/01/2013','ml')
insert into stud values ('Abi',  '2',  '22/01/2013','od')

如果选择该表,则表示我得到的输出为:

sname   hr   dt   att

abi      1    20/1/2013 a
abi      2    20/1/2013 p

bala      1    20/1/2013 p
bala      2    20/1/2013 a

但我希望输出为:

sname    h1    h2

abi      a      p
bala     p      a

如何透视表。

中Ray的响应应为您提供符合标准的DBMS所需的详细信息。

这种类型的转换称为透视。我假设SQL Server是数据库,因为在您提供的创建表代码中使用了
nvarchar

如果您使用的是SQL Server 2005+,则可以使用pivot函数,代码如下:

select sname, [1] as h1, [2] as h2
from
(
  select sname, hr, att
  from stud
  where att in ('a', 'p')
) d
pivot
(
  max(att)
  for hr in ([1], [2])
) p;

如果您未使用SQL Server 2005+或位于不支持pivot的其他数据库上,则可以使用带有
大小写
表达式的聚合函数:

select sname,
  max(case when hr=1 then att end) as H1,
  max(case when hr=2 then att end) as H2
from stud
where att in ('a', 'p')
group by sname;
请参见

SQL只是结构化查询语言—一种被许多数据库系统使用的语言,但不是数据库产品。。。更高级的功能是非常特定于供应商的,所以我们确实需要知道您使用的是什么数据库系统(以及哪个版本)。。。。