---------------拼装sql语句实现动态查找列名
declare @sql varchar(8000),@tbName varchar(40)
set @tbName = 'hzl'--这里填你的表名
set @sql = ''
select @sql = @sql +' union select '''+name+''' 原列名, '+name+' 值 from '+@tbName
from (
select a.name from syscolumns a
join sysobjects b on a.id=b.id
and b.xtype='U' and b.name=@tbName
)a
set @sql=stuff(@sql,1,6,'')
exec(@sql)
-----------删除测试
drop table hzl
---------------结果
原列名 值
cj 75
cj 78
cj 80
cj 85
cj 86
km 数学
km 英语
km 语文
name 李四
name 张三
Select @S=@S+',SUM(Case When Left([受理类型编码],1)='''+[受理类型编码]+''' Then 1 Else 0 End) As '''+[受理类型编码]+''''
From (Select Distinct Convert(Varchar(1),[受理类型编码]) As [受理类型编码] From TAcceptEvent) A Order By [受理类型编码]
Select @S='Select tp.姓名'+@S+' From TAcceptEvent tac left join Tperson tp on tp.编码 = tac.责任受理人编码 Group By tp.姓名'
EXEC(@S)
GO
我照猫画虎出来了一个,但是现在需要在下面的统计中用到上面统计的内容,必须把这些合并起来。
select
tt.责任调度人编码,
中止任务 = sum(case when tt.出车结果编码 = 2 then 1 else 0 end),
放空车 = sum(case when tt.出车结果编码 = 3 then 1 else 0 end),
正常完成 = sum(case when tt.出车结果编码 = 4 then 1 else 0 end)
-- 受理事件类型 ?
from Ttask tt
inner join TAcceptEvent tac on tac.事件编码 = tt.事件编码 and tac.受理序号 = tt.受理序号
left join TAlarmEvent tae on tae.事件编码 = tt.事件编码
left join TZAcceptType tzac on tzac.编码 = tac.受理类型编码
left join Tperson tp on tp.编码 = tt.责任调度人编码