22,210
社区成员
发帖
与我相关
我的任务
分享
CREATE PROCEDURE gc_sdhz
(
@tj int , --判断查调查询
@StartDate DATETIME ,--开始时间
@EndDate DATETIME, --结束时间
@Usertb_code varchar(50)=NULL --查询条件
)
AS
DECLARE @Sql NVARCHAR(max),@Andwhere NVARCHAR(max)
BEGIN
IF (@tj<=3)--按1~4级部门
BEGIN
SELECT @Sql=ISNULL(@Sql+',','')+QUOTENAME(xfsd_name)+'=ISNULL(SUM(CASE WHEN '
+CASE WHEN CONVERT(VARCHAR(8),xfsd_ks,8)>CONVERT(VARCHAR(8),xfsd_js,8)
THEN 'CONVERT(VARCHAR(8),b.recdt,8) BETWEEN '''+CONVERT(VARCHAR(8),xfsd_ks,8) +''' AND ''23:59:59'' OR CONVERT(VARCHAR(8),b.recdt,8) BETWEEN ''00:00:00'' AND '''+CONVERT(VARCHAR(8),xfsd_js,8) +''''
ELSE
'CONVERT(VARCHAR(8),b.recdt,8) BETWEEN '''+CONVERT(VARCHAR(8),xfsd_ks,8) +''' AND '''+CONVERT(VARCHAR(8),xfsd_js,8) +'''' END
+' THEN Convert(decimal(18,2),ISNULL(b.smm1+b.smm2,0)/100.0*-1) ELSE 0 END),0),'
+QUOTENAME(xfsd_name+'人数')+'=COUNT(DISTINCT CASE WHEN '
+CASE WHEN CONVERT(VARCHAR(8),xfsd_ks,8)>CONVERT(VARCHAR(8),xfsd_js,8)
THEN 'CONVERT(VARCHAR(8),b.recdt,8) BETWEEN '''+CONVERT(VARCHAR(8),xfsd_ks,8) +''' AND ''23:59:59'' OR CONVERT(VARCHAR(8),b.recdt,8) BETWEEN ''00:00:00'' AND '''+CONVERT(VARCHAR(8),xfsd_js,8) +''''
ELSE
'CONVERT(VARCHAR(8),b.recdt,8) BETWEEN '''+CONVERT(VARCHAR(8),xfsd_ks,8) +''' AND '''+CONVERT(VARCHAR(8),xfsd_js,8) +'''' END
+' THEN a.DeptNo1 END),'
+QUOTENAME(xfsd_name+'次数')+'=ISNULL(SUM(CASE WHEN '
+CASE WHEN CONVERT(VARCHAR(8),xfsd_ks,8)>CONVERT(VARCHAR(8),xfsd_js,8)
THEN 'CONVERT(VARCHAR(8),b.recdt,8) BETWEEN '''+CONVERT(VARCHAR(8),xfsd_ks,8) +''' AND ''23:59:59'' OR CONVERT(VARCHAR(8),b.recdt,8) BETWEEN ''00:00:00'' AND '''+CONVERT(VARCHAR(8),xfsd_js,8) +''''
ELSE
'CONVERT(VARCHAR(8),b.recdt,8) BETWEEN '''+CONVERT(VARCHAR(8),xfsd_ks,8) +''' AND '''+CONVERT(VARCHAR(8),xfsd_js,8) +'''' END
+' THEN 1 ELSE 0 END),0)'
,@Andwhere=ISNULL(@Andwhere+' OR ','')+
CASE WHEN CONVERT(VARCHAR(8),xfsd_ks,8)>CONVERT(VARCHAR(8),xfsd_js,8)
THEN '(CONVERT(VARCHAR(8),b.recdt,8) BETWEEN '''+CONVERT(VARCHAR(8),xfsd_ks,8) +''' AND ''23:59:59'' OR CONVERT(VARCHAR(8),b.recdt,8) BETWEEN ''00:00:00'' AND '''+CONVERT(VARCHAR(8),xfsd_js,8) +''')'
ELSE
'CONVERT(VARCHAR(8),b.recdt,8) BETWEEN '''+CONVERT(VARCHAR(8),xfsd_ks,8) +''' AND '''+CONVERT(VARCHAR(8),xfsd_js,8) +'''' END
FROM dbo.xfsdHzN
PRINT @Sql
PRINT @Andwhere
SET @Sql='SELECT
a.DeptNo1, --部门编号
a.DeptNa1, --部门名称
'+@Sql+', --时段组合结果
COUNT(*) AS cs , --消费次数
COUNT(DISTINCT a.emcode) AS rs , --消费人数
Convert(decimal(18,2),ISNULL(SUM(ISNULL(b.smm1+b.smm2,0)/100.0*-1),0)) AS hj --合计
FROM VWpersonal AS a
INNER JOIN xfsourceRec AS b ON b.hrcode = a.emcode
WHERE b.recdt between @StartDate AND @EndDate AND '+@Usertb_code+' AND ('+@Andwhere+') GROUP BY a.DeptNo1,a.DeptNa1'
EXEC sys.sp_executesql @Sql,N'@StartDate datetime,@EndDate datetime , @Usertb_code varchar(50)',@StartDate,@EndDate,@Usertb_code
END
END
GO
CREATE PROCEDURE gc_sdhz
(
@tj int , --判断查调查询
@StartDate DATETIME ,--开始时间
@EndDate DATETIME, --结束时间
@Usertb_code varchar(50)=NULL --查询条件
)
AS
DECLARE @Sql NVARCHAR(max),@Andwhere NVARCHAR(max)
BEGIN
IF (@tj<=3)--按1~4级部门
BEGIN
SELECT @Sql=ISNULL(@Sql+',','')+QUOTENAME(xfsd_name)+'=ISNULL(SUM(CASE WHEN '
+CASE WHEN CONVERT(VARCHAR(8),xfsd_ks,8)>CONVERT(VARCHAR(8),xfsd_js,8)
THEN 'CONVERT(VARCHAR(8),b.recdt,8) BETWEEN '''+CONVERT(VARCHAR(8),xfsd_ks,8) +''' AND ''23:59:59'' OR CONVERT(VARCHAR(8),b.recdt,8) BETWEEN ''00:00:00'' AND '''+CONVERT(VARCHAR(8),xfsd_js,8) +''''
ELSE
'CONVERT(VARCHAR(8),b.recdt,8) BETWEEN '''+CONVERT(VARCHAR(8),xfsd_ks,8) +''' AND '''+CONVERT(VARCHAR(8),xfsd_js,8) +'''' END
+' THEN Convert(decimal(18,2),ISNULL(b.smm1+b.smm2,0)/100.0*-1) ELSE 0 END),0),'
+QUOTENAME(xfsd_name+'人数')+'=COUNT(DISTINCT CASE WHEN '
+CASE WHEN CONVERT(VARCHAR(8),xfsd_ks,8)>CONVERT(VARCHAR(8),xfsd_js,8)
THEN 'CONVERT(VARCHAR(8),b.recdt,8) BETWEEN '''+CONVERT(VARCHAR(8),xfsd_ks,8) +''' AND ''23:59:59'' OR CONVERT(VARCHAR(8),b.recdt,8) BETWEEN ''00:00:00'' AND '''+CONVERT(VARCHAR(8),xfsd_js,8) +''''
ELSE
'CONVERT(VARCHAR(8),b.recdt,8) BETWEEN '''+CONVERT(VARCHAR(8),xfsd_ks,8) +''' AND '''+CONVERT(VARCHAR(8),xfsd_js,8) +'''' END
+' THEN a.DeptNo1 END),'
+QUOTENAME(xfsd_name+'次数')+'=ISNULL(SUM(CASE WHEN '
+CASE WHEN CONVERT(VARCHAR(8),xfsd_ks,8)>CONVERT(VARCHAR(8),xfsd_js,8)
THEN 'CONVERT(VARCHAR(8),b.recdt,8) BETWEEN '''+CONVERT(VARCHAR(8),xfsd_ks,8) +''' AND ''23:59:59'' OR CONVERT(VARCHAR(8),b.recdt,8) BETWEEN ''00:00:00'' AND '''+CONVERT(VARCHAR(8),xfsd_js,8) +''''
ELSE
'CONVERT(VARCHAR(8),b.recdt,8) BETWEEN '''+CONVERT(VARCHAR(8),xfsd_ks,8) +''' AND '''+CONVERT(VARCHAR(8),xfsd_js,8) +'''' END
+' THEN 1 ELSE 0 END),0)'
,@Andwhere=ISNULL(@Andwhere+' OR ','')+
CASE WHEN CONVERT(VARCHAR(8),xfsd_ks,8)>CONVERT(VARCHAR(8),xfsd_js,8)
THEN '(CONVERT(VARCHAR(8),b.recdt,8) BETWEEN '''+CONVERT(VARCHAR(8),xfsd_ks,8) +''' AND ''23:59:59'' OR CONVERT(VARCHAR(8),b.recdt,8) BETWEEN ''00:00:00'' AND '''+CONVERT(VARCHAR(8),xfsd_js,8) +''')'
ELSE
'CONVERT(VARCHAR(8),b.recdt,8) BETWEEN '''+CONVERT(VARCHAR(8),xfsd_ks,8) +''' AND '''+CONVERT(VARCHAR(8),xfsd_js,8) +'''' END
FROM dbo.xfsdHzN
PRINT @Sql
SET @Sql='SELECT
a.DeptNo1, --部门编号
a.DeptNa1, --部门名称
'+@Sql+', --时段组合结果
COUNT(*) AS cs , --消费次数
COUNT(DISTINCT a.emcode) AS rs , --消费人数
Convert(decimal(18,2),ISNULL(SUM(ISNULL(b.smm1+b.smm2,0)/100.0*-1),0)) AS hj --合计
FROM VWpersonal AS a
INNER JOIN xfsourceRec AS b ON b.hrcode = a.emcode
WHERE b.recdt between @StartDate AND @EndDate AND '+@Usertb_code+'('+@Andwhere+') GROUP BY a.DeptNo1,a.DeptNa1'
EXEC sys.sp_executesql @Sql,N'@StartDate datetime,@EndDate datetime , @Usertb_code varchar(50)',@StartDate,@EndDate,@Usertb_code
END
END
GO
ALTER 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 'CONVERT(VARCHAR(8),b.Xfsourcee_sj,8) BETWEEN '''+CONVERT(VARCHAR(8),Sntb_ksdt,8) +''' AND ''23:59:59'' OR CONVERT(VARCHAR(8),b.Xfsourcee_sj,8) BETWEEN ''00:00:00'' AND '''+CONVERT(VARCHAR(8),Sntb_jsdt,8) +''''
ELSE
'CONVERT(VARCHAR(8),b.Xfsourcee_sj,8) BETWEEN '''+CONVERT(VARCHAR(8),Sntb_ksdt,8) +''' AND '''+CONVERT(VARCHAR(8),Sntb_jsdt,8) +'''' END
+' THEN b.Xfsourcee_jr ELSE 0 END),0),'
+QUOTENAME(Sntb_name+'人数')+'=COUNT(DISTINCT CASE WHEN '
+CASE WHEN CONVERT(VARCHAR(8),Sntb_ksdt,8)>CONVERT(VARCHAR(8),Sntb_jsdt,8)
THEN 'CONVERT(VARCHAR(8),b.Xfsourcee_sj,8) BETWEEN '''+CONVERT(VARCHAR(8),Sntb_ksdt,8) +''' AND ''23:59:59'' OR CONVERT(VARCHAR(8),b.Xfsourcee_sj,8) BETWEEN ''00:00:00'' AND '''+CONVERT(VARCHAR(8),Sntb_jsdt,8) +''''
ELSE
'CONVERT(VARCHAR(8),b.Xfsourcee_sj,8) BETWEEN '''+CONVERT(VARCHAR(8),Sntb_ksdt,8) +''' AND '''+CONVERT(VARCHAR(8),Sntb_jsdt,8) +'''' END
+' THEN a.Usertb_code END),'
+QUOTENAME(Sntb_name+'次数')+'=ISNULL(SUM(CASE WHEN '
+CASE WHEN CONVERT(VARCHAR(8),Sntb_ksdt,8)>CONVERT(VARCHAR(8),Sntb_jsdt,8)
THEN 'CONVERT(VARCHAR(8),b.Xfsourcee_sj,8) BETWEEN '''+CONVERT(VARCHAR(8),Sntb_ksdt,8) +''' AND ''23:59:59'' OR CONVERT(VARCHAR(8),b.Xfsourcee_sj,8) BETWEEN ''00:00:00'' AND '''+CONVERT(VARCHAR(8),Sntb_jsdt,8) +''''
ELSE
'CONVERT(VARCHAR(8),b.Xfsourcee_sj,8) BETWEEN '''+CONVERT(VARCHAR(8),Sntb_ksdt,8) +''' AND '''+CONVERT(VARCHAR(8),Sntb_jsdt,8) +'''' END
+' THEN 1 ELSE 0 END),0)'
FROM dbo.Sntb
--PRINT @Sql
SET @Sql='SELECT '+@Sql+',
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
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)