我有这样的存储过程:
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 编写相同的存储过程
ALTER procedure [dbo].[ParkingSummary1]
@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)
DECLARE @cols AS NVARCHAR(MAX),@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Vtype) from VType_tbl
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')
set @query = 'SELECT LocName, ' + @cols + ' from (select l.LocName,Vtype from Transaction_tbl t join VType_tbl v on t.vtid = v.vtid join dbo.Location_tbl l on t.locid=l.Locid where dtime between '''+ @date1 +''' and '''+ @date2 +'''
and Status = 5) d pivot ( count(Vtype) for Vtype in (' + @cols + ')) p '
exec sys.sp_executesql @query
end
但我在执行此操作时收到如下错误: 列 'Location_tbl.LocName' 在选择列表中无效,因为它既不包含在聚合函数或 GROUP BY 子句中。