1
我试图从一个名为BioStar的数据库生成报告,该数据库来自Suprema Finger Print机器。下面是数据的样本,我有:SQL Server PIVOT with dateadd()
nDateTime sUserName department Event EventName nUserID
--------- --------- --------- ----- -------- ------
2015-08-15 07:52:37.000 Hamdy Mokhtar Moelem Nursing 0 In 75
2015-08-15 16:26:14.000 Hamdy Mokhtar Moelem Nursing 1 Out 75
2015-08-16 07:59:18.000 Hamdy Mokhtar Moelem Nursing 0 In 75
2015-08-16 07:59:25.000 Hamdy Mokhtar Moelem Nursing 0 In 75
2015-08-16 16:06:24.000 Hamdy Mokhtar Moelem Nursing 1 Out 75
2015-08-16 16:06:30.000 Hamdy Mokhtar Moelem Nursing 1 Out 75
这是存储过程我使用:
ALTER proc [dbo].[viewLogInfo]
@UserIdn int,
@startDate smalldatetime,
@endDate smalldatetime
as
--exec viewLogInfo '75','2015-08-15','2015-08-25'
select DATEADD(s,el.nDateTime,'1970-01-01') nDateTime, sUserName,ud.sName,el.nTNAEvent,dek.sEventName,nUserID from tb_Event_Log el
join TB_USER u on el.nUserID=u.nUserIdn
join TB_EVENT_DATA ed on el.nEventIdn=ed.nEventIdn
join TB_TA_DEVICE_EVENT_KEY dek on el.nTNAEvent=dek.nKeyIdn
join TB_USER_DEPT ud on u.nDepartmentIdn=ud.nDepartmentIdn
where [email protected] and (DATEADD(s,el.nDateTime,'1970-01-01') between @startDate and @endDate)
order by el.nEventLogIdn
我希望报告看起来像这样:
nDateTime sUserName IN OUT
--------- --------- -- ---
2015-08-15 Hamdy Mokhtar Moelem 07:52:37 16:26:14
这里是我迄今试过的:
USE [BioStar]
GO
/****** Object: StoredProcedure [dbo].[viewLogInfo12] Script Date: 09/11/2015 20:42:33 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[viewLogInfo12]
[email protected] int,
@startDate smalldatetime,
@endDate smalldatetime
as
-- exec viewLogInfo12 '2015-08-01','2015-08-31'
select sUserName,departmentName,event01,nUserID,nDateTime2,ev1,
[in] as inTime, [out] as outTime
e
from
(
select sUserName,ud.sName departmentName,el.nTNAEvent event01,dek.sEventName,dek.sEventName ev1,nUserID,DATEADD(s,el.nDateTime,'1970-01-01') nDateTime1,DATEADD(s,el.nDateTime,'1970-01-01') nDateTime2 from tb_Event_Log el
join TB_USER u on el.nUserID=u.nUserIdn
join TB_EVENT_DATA ed on el.nEventIdn=ed.nEventIdn
join TB_TA_DEVICE_EVENT_KEY dek on el.nTNAEvent=dek.nKeyIdn
join TB_USER_DEPT ud on u.nDepartmentIdn=ud.nDepartmentIdn
where (DATEADD(s,el.nDateTime,'1970-01-01') between @startDate and @endDate)
) m
pivot
(max(sEventName)
for sEventName in ([in],[out])) pvt
inTime和outTime均为null。 请帮忙。
In和Out不列名可是,我想你需要把单引号周围的 '(MAX(sEventName)为sEventName在(['中'],['out']))' – NaNey
@NaNey我试着把['in']和['out'],它是给出空值。任何其他建议。 – InAbuukar
@InAbuukar:您可以使用示例数据和查询创建sqlfiddle吗? – DarkKnight