当前位置: 代码迷 >> Sql Server >> 请教查询下列表用SQL语句效率最快的查询语句是
  详细解决方案

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

热度:82   发布时间:2016-04-27 18:39:16.0
请问查询下列表用SQL语句效率最快的查询语句是

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

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

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

SQL code
--建立测试环境Create Table 表(year varchar(10),name varchar(10),value varchar(10))--插入数据insert into 表select '2002','a','1' unionselect '2002','b','4' unionselect '2002','c','5' unionselect '2003','a','7' unionselect '2003','b','5' unionselect '2003','c','4' unionselect '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 表) ASET @[email protected]+' FROM 表 GROUP BY name'exec (@SQL)  --删除测试环境Drop Table 表/*name   2002    2003    2004a    1    7    4b    4    5    0c    5    4    0*/
------解决方案--------------------
SQL code
--> 测试数据: #Tif object_id('tempdb.dbo.#T') is not null drop table #Tcreate table #T (员工姓名 varchar(4),部门 varchar(6))insert into #Tselect '张三','部门一' union allselect '李四','部门二' union allselect '王三','部门一' union allselect '张四','部门三' union allselect '罗三','部门二' union allselect '周四','部门三' union allselect '秦三','部门一' union allselect '周三','部门二' union allselect '高四','部门一'godeclare @sql varchar(8000)set @sql='select 员工姓名'select @[email protected]+',case when 部门='''+部门+''' then ''是'' else '''' end ['+部门+']'from #T group by 部门exec (@sql+' from #T')godrop table #T/*员工姓名 部门二  部门三  部门一  ---- ---- ---- ---- 张三             是李四   是         王三             是张四        是    罗三   是         周四        是    秦三             是周三   是         高四             是*/
  相关解决方案