-2

我有一个使用 MS Visual Studio 2010 C# 的学校项目。该项目是一个项目管理软件。基本上管理了许多项目,根据您工作的班次向员工提供津贴。我的项目共有 4 张桌子,它们是;

  1. 员工:您可以在其中管理所有员工的详细信息
  2. AssignProject:它说明哪个员工分配到哪个项目
  3. 班次:它说明员工在哪个班次上工作
  4. 项目:您可以在其中管理所有项目详细信息

我想计算总津贴employee。例如。项目 A上不同班次EmployeeA工作日。我如何对它执行 SQL?33

更新:我尝试了以下操作,它设法获得了 EmployeeA 工作日,但它显示了为该项目提供的津贴。现在,我如何从该代码中筛选出仅显示员工工作的班次。

con = new SqlConnection(ConfigurationManager
                          .ConnectionStrings["projectshift"].ConnectionString);
da = new SqlDataAdapter(@"
        SELECT 
            Shift.date, 
            Projects.AGeneral, 
            Projects.AMorning, 
            Projects.AEvening, 
            Projects.ANight 
        FROM Projects  
        INNER JOIN Shift ON Projects.ProjectId = Shift.ProjectId 
        WHERE Shift.EmployeeId='" + Session["CurrentUser"] + "'", con);
ds = new DataSet();
da.Fill(ds, "AssignProject");
GridView1.DataSource = ds;
GridView1.DataBind();
4

1 回答 1

0

我首先建议您使用参数化查询——这很容易受到 SQL 注入的影响。

话虽如此,假设您使用的是 SQL Server(未经测试)并假设您希望将 shift.date 中的不同天数视为工作天数以及 shift.date 中的所有记录用于轮班工作:

SELECT Count(DISTINCT CONVERT(varchar(10), Shift.Date, 111)) as DaysWorked, 
   COUNT(Shift.date) as ShiftsWorked,
   Projects.AGeneral, Projects.AMorning, Projects.AEvening, Projects.ANight 
FROM Projects 
   INNER JOIN Shift ON Projects.ProjectId = Shift.ProjectId 
WHERE ...
GROUP BY Projects.AGeneral, Projects.AMorning, Projects.AEvening, Projects.ANight 

祝你好运。

于 2013-01-20T18:06:52.507 回答