tbVication (empName varchar(20),leave1 int,leave2 int ,leave3 int ).数据如下
empName leave1 leave2 leave3
nana 80 80 80
现在我的需求是 比如我只要nana 这个empName的数据,但是这样显示
empName nana
leave1 80
leave2 80
leave3 80
请问这样的查询语句应该怎么写呢 ?
http://www.cnblogs.com/peaceli/archive/2009/09/08/1561113.html
这上面讲解很详细
你这个问题既不属于行转列,也不属于列转行。
当然不排除能够做出你这个结果,但是觉得你本身的表结构设计就有问题。
如果你的leave后面因为需求变化,多加了一个,你还得改表结构。
declare @t table (empName varchar(20),leave1 int,leave2 int ,leave3 int )
insert @t
select 'nana', 80 , 80, 80
select 'empname',empname from @t
union all
select 'leave1',convert(varchar(10),leave1) from @t
union all
select 'leave2',convert(varchar(10),leave2) from @t
union all
select 'leave3',convert(varchar(10),leave3) from @t
这个是我唯一能想到的方法。
名字那一行自己写吧,我只写行转列的
SELECT s,sValue
FROM
(
SELECT empName,leave1,leave2,leave3 FROM tbVication
)p
UNPIVOT
(
sValue FOR s IN (leave1,leave2,leave3)
)
AS unpvt