【问题标题】:Keep only Day from Date in column name在列名中仅保留日期中的日期
【发布时间】:2018-04-11 15:37:47
【问题描述】:

我通过在线帮助创建了一个存储过程来生成月度考勤报告

    USE [Attendace]
GO
/****** Object:  StoredProcedure [dbo].[PerDayAttendance]    Script Date: 04/11/2018 20:16:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[PerDayAttendance] 
@STARTDATE DATE,  
@ENDDATE DATE  
AS BEGIN
WITH DATERANGE AS
(  
   SELECT DT =DATEADD(DD,0, @STARTDATE)  
   WHERE DATEADD(DD, 1, @STARTDATE) <= @ENDDATE  
   UNION ALL  
   SELECT DATEADD(DD, 1, DT)  
   FROM DATERANGE  
   WHERE DATEADD(DD, 1, DT) <= @ENDDATE  
)  SELECT * INTO cte_DATES  
FROM DATERANGE   
DECLARE @COLUMN varchar(max)
SELECT @COLUMN=ISNULL(@COLUMN+',','')+ '['+ CAST(CONVERT(DATE , T.DT) AS varchar) + ']'  FROM cte_DATES T
DECLARE @Columns2 varchar(max)  
SET @Columns2 = SUBSTRING((SELECT DISTINCT ',ISNULL(['+ CAST(CONVERT(DATE , DT) 
as varchar )+'],'''') AS ['+ CAST(CONVERT(DATE , DT) as varchar )+']' 
FROM cte_DATES GROUP BY dt FOR XML PATH('')),2,8000)  
DECLARE @QUERY varchar(MAX)  
SET @QUERY = 'SELECT P.EID, ENAME, ' + @Columns2 +', Wdays, Holidays, K.Present, (Wdays-(Holidays + K.Present))as Absent, (cast(((s.Salary/Wdays)*(k.present+Holidays)) as numeric(36,0))) as Salary FROM   
(  
SELECT  A.EID, A.ENAME ,  B.DT AS DATE, (Case when cast(A.WorkTime as time) > 
''00:00:00'' then ''P'' else ''Abs'' end) as worktime FROM TblAttendnce  A 
RIGHT OUTER JOIN cte_DATES B 
ON A.EDATE=B.DT
) X  
PIVOT   
(  
MIN([Worktime])  
FOR [DATE] IN (' + @COLUMN + ')  
) P 
Cross apply (select Wdays, Holidays from dbo.fn_Fn1(''' + CAST(@STARTDATE AS VARCHAR(50)) + ''','''+ CAST(@ENDDATE as Varchar(50))+'''))H 
Right Outer Join (select eid, COUNT(present) as present from Attendace.dbo.vwPayroll 
where Edate between ''' + CAST(@STARTDATE AS VARCHAR(50)) + '''and'''+ CAST(@ENDDATE as Varchar(50))+'''
group by eid) as K on K.eid=p.EID
Right Outer Join ((select eid, salary from dbo.employeeMast))as s on S.eid=p.eid
WHERE ISNULL(ENAME,'''')<>''''  
'
Exec (@QUERY)  
DROP TABLE cte_DATES   
END

现在结果是这样的

我需要从这个过程中准备一份水晶报告,但由于动态列标题名称,我无法做到这一点。

我的查询是如何将列名设为 01、02、03 而不是 2018-04-01、2018-04-02、2018-04-03

我的意思是我想将列名重命名为 dd/mm/yyyy 的 DD

通过这种方式,我可以将其反映在水晶报告中。

【问题讨论】:

标签: sql sql-server vb.net crystal-reports crystal-reports-2010


【解决方案1】:

当我开发水晶报表或培训客户时;我教他们重命名为 SQL 中的数据字段或存储过程(如日期 3)或插入重复详细信息行并使用 OLD 行进行开发。使新行成为注释行。

【讨论】:

  • 没听懂,我可以在上面的代码中使用别名来定义日期列吗?我不是编码专业人士,所以我需要一些示例
猜你喜欢
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
相关资源
最近更新 更多