那个大神帮帮忙

qq_26006573 2016-08-04 02:17:17
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)


请教哪位大神,我这里能统计中 比如 时段早餐金额 中餐金额 合计笔数 合计人数 合计金额
我在在查询里 查询出的结果是,早餐金额 早餐笔数 早餐人数 中餐金额 中餐笔数 中餐人数,
就是每个时段加一个这个时段的 笔数和人数,大神帮我修改下。



...全文
107 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-08-04
  • 打赏
  • 举报
回复

22,302

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧