那个大神帮帮忙
create table Usertb --人员表
(
Usertb_id int identity(1,1), --序号
Usertb_code varchar(50),--人员编号
Usertb_name varchar(50),--人员名称
)
insert Usertb values('00001','李四')
insert Usertb values('00002','李五')
create table Sntb --时段表
(
Sntb_id int identity(1,1), --序号
Sntb_name varchar(50),--时段名称
Sntb_ksdt datetime,-- 开始时间
Sntb_jsdt datetime-- 结束时间
)
insert Sntb values('早餐','2016-08-01 07:00:00','2016-08-01 08:30:00')
insert Sntb values('晚餐','2016-08-01 18:00:00','2016-08-01 20:30:00')
insert Sntb values('夜餐','2016-08-01 23:00:00','2016-08-02 01:30:00')
create table Xfsourcee --消费表
(
Xfsourcee_id int identity(1,1), --序号
Xfsourcee_code varchar(50),--人员编号
Xfsourcee_jr int ,--消费金额
Xfsourcee_sj datetime,-- 消费时间
)
insert Xfsourcee values('00001',100,'2016-08-01 07:30:00')
insert Xfsourcee values('00001',200,'2016-08-01 07:31:00')
insert Xfsourcee values('00001',300,'2016-08-01 18:30:00')
insert Xfsourcee values('00001',500,'2016-08-02 01:30:00')
过程
CREATE PROCEDURE P1
(
@StartDate DATETIME , --2016-08-01
@EndDate DATETIME, --2016-08-01 23:59:59
@Usertb_code varchar(50)=NULL
)
AS
DECLARE @Sql NVARCHAR(max)
SELECT @Sql=ISNULL(@Sql+',','')+QUOTENAME(Sntb_name)+'=ISNULL(SUM(CASE WHEN '
+CASE WHEN CONVERT(VARCHAR(8),Sntb_ksdt,8)>CONVERT(VARCHAR(8),Sntb_jsdt,8)
THEN 'b.Xfsourcee_sj BETWEEN '''+CONVERT(VARCHAR(8),Sntb_ksdt,8) +''' AND ''23:59:59'' OR b.Xfsourcee_sj BETWEEN ''00:00:00'' AND '''+CONVERT(VARCHAR(8),Sntb_jsdt,8) +''''
ELSE
'b.Xfsourcee_sj BETWEEN '''+CONVERT(VARCHAR(8),Sntb_ksdt,8) +''' AND '''+CONVERT(VARCHAR(8),Sntb_jsdt,8) +'''' END
+' THEN b.Xfsourcee_jr ELSE 0 END),0)'
FROM dbo.Sntb
--PRINT @Sql
SET @Sql='SELECT '+@Sql+',
COUNT(*) AS 消费次数 ,
COUNT(DISTINCT a.Usertb_code) AS 消费人数 ,
ISNULL(SUM(b.Xfsourcee_jr),0) AS 合计
FROM Usertb AS a
INNER JOIN Xfsourcee AS b ON b.Xfsourcee_code = a.Usertb_code
WHERE b.Xfsourcee_sj between @StartDate AND @EndDate'+CASE WHEN @Usertb_code>'' THEN ' AND a.Usertb_code=@Usertb_code' ELSE '' END
EXEC sys.sp_executesql @Sql,N'@StartDate datetime,@EndDate datetime , @Usertb_code varchar(50)',@StartDate,@EndDate,@Usertb_code
GO
--查某一个员工
EXEC dbo.P1 @StartDate = '2016-08-01', -- date
@EndDate='2016-08-02 23:59:59',
@Usertb_code = '00001' -- varchar(50)
--查所有员工
EXEC dbo.P1 @StartDate = '2016-08-01', -- date
@EndDate='2016-08-02 23:59:59',
@Usertb_code = '' -- varchar(50)
请教哪位大神,我这里能统计中 比如 时段早餐金额 中餐金额 合计笔数 合计人数 合计金额
我在在查询里 查询出的结果是,早餐金额 早餐笔数 早餐人数 中餐金额 中餐笔数 中餐人数,
就是每个时段加一个这个时段的 笔数和人数,大神帮我修改下。