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