我有一个这样的存储过程:
ALTER procedure [dbo].[performance]
@startdate nvarchar(100),
@enddate nvarchar(100) as begin declare @date1 nvarchar(100)=convert(varchar, @startdate+'00:00:00.000',120) declare @date2 nvarchar(100)= convert(varchar, @enddate+'23:59:59.000',120) set NOCOUNT on;
select l.LocName,v.Vtype,
SUM(convert(numeric(18, 2), DATEDIFF(MI,t.DelDate,t.Paydate))) as TotalDiff,[dbo].[testfunctionstacknew](
CONVERT(decimal(10,1), AVG( CONVERT(NUMERIC(18,2), DATEDIFF(SS,t.Paydate,t.DelDate) ) ))) as Average
from Transaction_tbl t left join VType_tbl v on t.vtid=v.vtid left join Location_tbl l on t.Locid=l.Locid
where t.Locid in(select t1.Locid from Transaction_tbl t1) and dtime between @date1 and @date2 and Status =5 group by v.Vtype,l.LocName,l.Locid order by l.Locid
end
我这样出去了:
LocName Vtype TotalDiff Average
Address Normal 15 00:10:01
Adress vip 18 00:08:01
Address VVIP 9 00:04:00
Address Pass 20 00:15:00
Goldsouk normal 45 00:18:08
Goldsouk vip 17 00:11:36
Fashion vip 78 00:35:25
Fashion VVip 2 00:01:00
但我需要在不同的模型中输出
LocName Normal Vip VVip Pass Staff
Address 00:10:01 00:08:01 00:04:00 0 0
GoldSouck 00:18:08 00:11:36 0 0 0
Fashion 0 00:35:25 00:01:00 0 0
因为我知道我必须使用pivot ..但我不知道如何使用它?如果有人知道请帮我找出..我不能用硬盘我的vtype..actulay vtype是dynamic.that来自Vtype Table ..如果有人知道如何解决这个问题..请帮我找出< / p>
答案 0 :(得分:0)
您可以手动转动:
ALTER procedure [dbo].[performance]
(
@startdate nvarchar(100),
@enddate nvarchar(100)
)
as
begin
set nocount on
declare
@date1 nvarchar(100)=convert(varchar, @startdate+'00:00:00.000',120)
@date2 nvarchar(100)= convert(varchar, @enddate+'23:59:59.000',120)
;with cte as (
select
l.LocName, v.Vtype,
sum(datediff(mi, t.DelDate, t.Paydate)) as TotalDiff,
dbo.testfunctionstacknew(
convert(decimal(10,1),
avg(convert(numeric(18,2), datediff(ss, t.Paydate, t.DelDate))
)
) as Average
from Transaction_tbl as t
left join VType_tbl as v on t.vtid = v.vtid
left join Location_tbl as l on t.Locid = l.Locid
where
t.Locid in(select t1.Locid from Transaction_tbl as t1) and
t.dtime between @date1 and @date2 and
t.Status = 5
group by v.Vtype, l.LocName, l.Locid
)
select
c.LocName,
max(case when c.Vtype = 'Normal' then Average end) as Normal,
max(case when c.Vtype = 'Vip' then Average end) as Vip,
max(case when c.Vtype = 'VVip' then Average end) as VVip,
max(case when c.Vtype = 'Pass' then Average end) as Pass,
max(case when c.Vtype = 'Staff' then Average end) as Staff
from cte as c
group by c.LocName
order by c.LocName
end