27,580
社区成员
发帖
与我相关
我的任务
分享
CREATE PROCEDURE P1
(
@Date date ,
@Usertb_code varchar(50)
)
AS
SELECT ISNULL(SUM(CASE WHEN c.Sntb_name = '早餐' THEN b.Xfsourcee_jr
ELSE 0
END),0) AS 早餐合计 ,
ISNULL(SUM(CASE WHEN c.Sntb_name = '晚餐' THEN b.Xfsourcee_jr
ELSE 0
END),0) AS 晚餐合计 ,
ISNULL(SUM(CASE WHEN c.Sntb_name = '夜餐' THEN b.Xfsourcee_jr
ELSE 0
END),0) AS 夜餐合计 ,
COUNT(*) AS 消费次数 ,
COUNT(DISTINCT a.Usertb_code) AS 消费人数 , --这里没意义,显示固定为1,你查的是一个人
ISNULL(SUM(b.Xfsourcee_jr),0) AS 合计
FROM Usertb AS a
INNER JOIN Xfsourcee AS b ON b.Xfsourcee_code = a.Usertb_code
INNER JOIN dbo.Sntb AS c ON b.Xfsourcee_sj BETWEEN c.Sntb_ksdt
AND c.Sntb_jsdt
WHERE DATEDIFF(dd, @Date, c.Sntb_ksdt) = 0;
GO
EXEC dbo.P1 @Date = '2016-08-01', -- date
@Usertb_code = '00001' -- varchar(50)
-- 建存储过程
create proc sp_getSummary(@fdate datetime,@empno varchar(50))
as
begin
select 姓名=a.Usertb_name,
早餐合计=sum(case when c.Sntb_name='早餐' then b.Xfsourcee_jr else 0 end),
晚餐合计=sum(case when c.Sntb_name='晚餐' then b.Xfsourcee_jr else 0 end),
夜餐合计=sum(case when c.Sntb_name='夜餐' then b.Xfsourcee_jr else 0 end),
消费次数合计=count(1),
消费人数合计=count(distinct a.Usertb_code),
总计=sum(b.Xfsourcee_jr)
from Usertb a
inner join Xfsourcee b on a.Usertb_code=b.Xfsourcee_code
inner join Sntb c on b.Xfsourcee_sj between c.Sntb_ksdt and c.Sntb_jsdt
where a.Usertb_code=@empno
and b.Xfsourcee_sj between @fdate and cast(convert(varchar,dateadd(d,1,@fdate),23)
+' '
+(select top 1 convert(varchar,Sntb_jsdt,108) from Sntb where Sntb_name='夜餐') as datetime)
group by a.Usertb_code,a.Usertb_name
end
-- 执行
exec sp_getSummary @fdate='2016-08-01',@empno='00001'
/*
姓名 早餐合计 晚餐合计 夜餐合计 消费次数合计 消费人数合计 总计
------------- ----------- ----------- ----------- ----------- ----------- -----------
李四 300 300 500 4 1 1100
(1 row(s) affected)
*/