表
员工姓名 部门
张三 部门一
李四 部门二
王三 部门一
张四 部门三
罗三 部门二
周四 部门三
秦三 部门一
周三 部门二
高四 部门一
用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/*员工姓名 部门二 部门三 部门一 ---- ---- ---- ---- 张三 是李四 是 王三 是张四 是 罗三 是 周四 是 秦三 是周三 是 高四 是*/