34,590
社区成员
发帖
与我相关
我的任务
分享
--创建表
CREATE TABLE [dbo].[TrTask](
[Id] [int] IDENTITY(1,1) NOT NULL,
[TrType] [nvarchar](50) NULL,
[TrId] [int] NULL,
[TaskName] [nvarchar](50) NULL,
[TaskStatus] [nvarchar](50) NULL,
[Score] [int] NULL,
CONSTRAINT [PK_TrTask] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
--初始化数据
insert into [dbo].[TrTask]
values
( 'A', 1, '事务开始', 'allstart', 101)
,( 'A', 1, '子任务1', 'start', 102)
,( 'A', 1, '子任务1', 'end', 103)
,( 'A', 1, '子任务2', 'start', 104)
,( 'A', 1, '子任务2', 'end', 105)
,( 'A', 1, '子任务3', 'start', 106)
,( 'A', 1, '子任务3', 'end', 107)
,( 'A', 1, '事务结束', 'allend', 108)
,( 'A', 2, '事务开始', 'allstart', 109)
,( 'A', 2, '子任务1', 'start', 110)
,( 'A', 2, '子任务1', 'end', 111)
,( 'A', 2, '子任务2', 'start', 112)
,( 'A', 2, '子任务2', 'end', 113)
,( 'A', 2, '子任务3', 'start', 114)
,( 'A', 2, '子任务3', 'end', 115)
,( 'A', 2, '事务结束', 'allend', 116)
,( 'B', 3, '事务开始', 'allstart', 109)
,( 'B', 3, '子任务1', 'start', 110)
,( 'B', 3, '子任务1', 'end', 111)
,( 'B', 3, '子任务2', 'start', 112)
,( 'B', 3, '子任务2', 'end', 113)
,( 'B', 3, '子任务3', 'start', 114)
,( 'B', 3, '子任务3', 'end', 115)
,( 'B', 3, '事务结束', 'allend', 116)
--创建表
CREATE TABLE [dbo].[TrTask](
[Id] [int] IDENTITY(1,1) NOT NULL,
[TrType] [nvarchar](50) NULL,
[TrId] [int] NULL,
[TaskName] [nvarchar](50) NULL,
[TaskStatus] [nvarchar](50) NULL,
[Score] [int] NULL,
CONSTRAINT [PK_TrTask] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
--初始化数据
insert into [dbo].[TrTask]
values
( 'A', 1, '事务开始', 'allstart', 101)
,( 'A', 1, '子任务1', 'start', 102)
,( 'A', 1, '子任务1', 'end', 103)
,( 'A', 1, '子任务2', 'start', 104)
,( 'A', 1, '子任务2', 'end', 105)
,( 'A', 1, '子任务3', 'start', 106)
,( 'A', 1, '子任务3', 'end', 107)
,( 'A', 1, '事务结束', 'allend', 108)
,( 'A', 2, '事务开始', 'allstart', 109)
,( 'A', 2, '子任务1', 'start', 110)
,( 'A', 2, '子任务1', 'end', 111)
,( 'A', 2, '子任务2', 'start', 112)
,( 'A', 2, '子任务2', 'end', 113)
,( 'A', 2, '子任务3', 'start', 114)
,( 'A', 2, '子任务3', 'end', 115)
,( 'A', 2, '事务结束', 'allend', 116)
,( 'B', 3, '事务开始', 'allstart', 109)
,( 'B', 3, '子任务1', 'start', 110)
,( 'B', 3, '子任务1', 'end', 111)
,( 'B', 3, '子任务2', 'start', 112)
,( 'B', 3, '子任务2', 'end', 113)
,( 'B', 3, '子任务3', 'start', 114)
,( 'B', 3, '子任务3', 'end', 115)
,( 'B', 3, '事务结束', 'allend', 116)
select TrType,1 as ttype,[TaskName],sum([Score]*(case when [TaskStatus]='start' then -1 else 1 end))*1.0/count(distinct [TrId]) as times
into #list
from [TrTask]
where [TaskStatus] in('start','end')
group by TrType,[TaskName]
union all
select TrType,2 as ttype,[TaskName]='总体事务',sum([Score]*(case when [TaskStatus]='start' then -1 else 1 end))*1.0/count(distinct [TrId]) as times
from [TrTask]
where [TaskStatus] in('start','end')
group by TrType
declare @colname nvarchar(4000)='',@sql nvarchar(max)=''
;
with list as(
select distinct ttype,[TaskName]
from #list
)
select @colname =@colname+',['+[TaskName]+']'
from list
order by ttype,[TaskName]
set @sql='
select TrType'+@colname+'
from (
select TrType,[TaskName],times
from #list) a pivot(sum(times) for [TaskName] in('+RIGHT(@colname,len(@colname)-1)+')) pt
'
exec(@sql)
TrType 子任务1 子任务2 子任务3 总体事务
-------------------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
A 1.000000000000 1.000000000000 1.000000000000 3.000000000000
B 1.000000000000 1.000000000000 1.000000000000 3.000000000000
DECLARE @sql VARCHAR(MAX)
SET @sql = 'select TrType'
SELECT @sql = @sql + ',max(case TaskName when ''' + TaskName
+ ''' then Score else 0 end)[' + TaskName + ']'
FROM ( SELECT DISTINCT
TaskName
FROM [TrTask]
WHERE TaskName LIKE '子%'
) a
SET @sql = @sql
+ ',avg(Score) as 事务总体 from [TrTask] group by TrType'
EXEC(@sql)