日期:2014-05-18  浏览次数:20456 次

请问查询下列表用SQL语句效率最快的查询语句是

员工姓名 部门
张三 部门一
李四 部门二
王三 部门一
张四 部门三
罗三 部门二
周四 部门三
秦三 部门一
周三 部门二
高四 部门一
用SQL语句效率最快查询出下列表的查询语句是:
员工姓名 部门一 部门二 部门三
张三 是
李四 是
王三 是
张四 是
罗三 是
周四 是
秦三 是
周三 是
高四 是

大家好,本人是初学希望能指点下小弟

------解决方案--------------------
给个行列转换例子

SQL code
--建立测试环境
Create Table 表(year varchar(10),name varchar(10),value varchar(10))
--插入数据
insert into 表
select '2002','a','1' union
select '2002','b','4' union
select '2002','c','5' union
select '2003','a','7' union
select '2003','b','5' union
select '2003','c','4' union
select '2004','a','4'
select * from 表
--测试语句
DECLARE @SQL VARCHAR(8000)
SET @SQL='SELECT name'
SELECT @SQL= @SQL+ 
    ',sum(CASE WHEN year = ''' + year + ''' THEN value else 0  END) [' + year + ']'
FROM (SELECT DISTINCT year FROM 表) A
SET @SQL=@SQL+' FROM 表 GROUP BY name'
exec (@SQL)
 
 
--删除测试环境
Drop Table 表
/*
name   2002    2003    2004
a    1    7    4
b    4    5    0
c    5    4    0

*/

------解决方案--------------------
SQL code
--> 测试数据: #T
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (员工姓名 varchar(4),部门 varchar(6))
insert into #T
select '张三','部门一' union all
select '李四','部门二' union all
select '王三','部门一' union all
select '张四','部门三' union all
select '罗三','部门二' union all
select '周四','部门三' union all
select '秦三','部门一' union all
select '周三','部门二' union all
select '高四','部门一'
go
declare @sql varchar(8000)
set @sql='select 员工姓名'
select @sql=@sql+',case when 部门='''+部门+''' then ''是'' else '''' end ['+部门+']'
from #T group by 部门

exec (@sql+' from #T')
go
drop table #T

/*

员工姓名 部门二  部门三  部门一  
---- ---- ---- ---- 
张三             是
李四   是         
王三             是
张四        是    
罗三   是         
周四        是    
秦三             是
周三   是         
高四             是

*/