0

我创建了一个表如下:

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')

如果选择表格意味着我得到的输出为:

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

如何旋转桌子..

4

2 回答 2

1

这种类型的转换称为枢轴nvarchar由于您提供的创建表代码中的使用,我假设 SQL Server 作为数据库。

如果您使用的是 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 Fiddle with Demo

如果您没有使用 SQL Server 2005+ 或在另一个不支持数据透视的数据库上,那么您可以使用带有CASE表达式的聚合函数:

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 Fiddle

于 2013-04-02T11:18:28.153 回答
0

Ray 在Sql Server 2008 Cross Tab Query中的响应应该为您提供符合标准的 DBMS 所需的详细信息。

于 2013-01-26T15:43:00.283 回答