C# 如何以表格形式显示员工出勤情况
我有一张桌子,通过手动打孔机存储员工的出勤情况。它作为先进先出逻辑工作,并显示emmploye的出席情况 现在我要准备整个部门的员工考勤表,每月总天数 管理层提出的表格格式如下:C# 如何以表格形式显示员工出勤情况,c#,sql,sql-server,crystal-reports,C#,Sql,Sql Server,Crystal Reports,我有一张桌子,通过手动打孔机存储员工的出勤情况。它作为先进先出逻辑工作,并显示emmploye的出席情况 现在我要准备整个部门的员工考勤表,每月总天数 管理层提出的表格格式如下: Employee Name | 1 | 2 | 3 | 4 | 5 |6 |..... so on to the days in a month John Carpenter | P | P | A | A | P | LFP John Seraph A | P | P | A | A | P | LFP 后端
Employee Name | 1 | 2 | 3 | 4 | 5 |6 |..... so on to the days in a month
John Carpenter | P | P | A | A | P | LFP
John Seraph A | P | P | A | A | P | LFP
后端是SQL Server 2000,前端是在C#上开发的。我们将使用crystal reports
表结构:
tbl_出席率
tbl_系
tbl_员工
tbl_员工轮班
tbl_叶
tbl_班次
CREATE TABLE [dbo].[tbl_Attendance] (
[AttendanceID] [bigint] IDENTITY (1, 1) NOT NULL ,
[PNO] [bigint] NULL ,
[AttDate] [datetime] NULL ,
[CurrentShift] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[ReaderID] [bigint] NULL ,
[Status] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[flag] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[ManualFlag] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[tbl_Department] (
[DeptID] [bigint] IDENTITY (1, 1) NOT NULL ,
[DeptName] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[tbl_Employee] (
[EmpID] [bigint] IDENTITY (1, 1) NOT NULL ,
[PNO] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[T1] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[T2] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[T3] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[T4] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[T5] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[T6] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[T7] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[T8] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[T9] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[CreatedDate] [datetime] NULL ,
[EmpName] [varchar] (100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[Type] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[tbl_EmployeeShifts] (
[EmpShiftID] [bigint] IDENTITY (1, 1) NOT NULL ,
[EmpID] [bigint] NULL ,
[ShiftID] [bigint] NULL ,
[DateFrom] [datetime] NULL ,
[DateTo] [datetime] NULL ,
[CreatedDate] [datetime] NULL ,
[DeptID] [bigint] NULL ,
[flag] [bit] NULL ,
[uFlag] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[tbl_LoginTime] (
[LoginTimeID] [bigint] IDENTITY (1, 1) NOT NULL ,
[UserID] [bigint] NULL ,
[LoginTime] [datetime] NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[tbl_Permission] (
[EmpPermissionID] [bigint] IDENTITY (1, 1) NOT NULL ,
[EmpID] [bigint] NULL ,
[DateFrom] [datetime] NULL ,
[DateTo] [datetime] NULL ,
[Type] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[CreatedDate] [datetime] NULL ,
[flag] [char] (10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[tbl_Shifts] (
[ShiftID] [bigint] IDENTITY (1, 1) NOT NULL ,
[StartShift] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[EndShift] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[CreatedDate] [datetime] NULL ,
[GraceTime] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[ShiftType] [varchar] (20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[tbl_UserInfo] (
[UserID] [bigint] IDENTITY (1, 1) NOT NULL ,
[UserName] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[UserPassword] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[CreatedDate] [datetime] NULL
) ON [PRIMARY]
上面是表格结构。我只想做一些连接,得到这种格式的报告
如上所述
查询逻辑方面的一些帮助将不胜感激。您可以使用用于表格格式的交叉表报告
这太宽泛了。请在此处查看SQL server PIVOT功能:。。。当你有更具体的问题或问题时,也许会回来。我看不出这个问题有什么问题,为什么会被否决这么多次。对我来说,这似乎是一个正常的问题。这里唯一的选项是创建SQL,它将以以下格式返回数据:EmployeeName、Day、Value。值应为int(0-未呈现,1呈现)。在Crystal中,使用交叉表并将EmployeeName放在行部分,Day放在列部分,Value放在细节部分。这将创建您想要的演示文稿,唯一的区别是您将看到0/1而不是P/A。无法在Crystal reports交叉表中汇总字符串。SQL Pivot不是一个选项,因为它将创建具有不同列数(不同月份)的表。Crystal reports是其中一项要求,它将无法正确地表达这一点。我已经用表格结构重新编辑了这篇文章。让我知道是否有可能通过上述表格结构获得预期的结果设计