如何在这么多表上做SQL?里面的细节

时间:2013-01-20 17:49:44

标签: sql

我有一个使用MS Visual Studio 2010 C#的学校项目。该项目是一个项目管理软件。基本上管理很多项目,根据您的工作班次给予员工津贴。我的项目共有4个表,它们是;

  1. 员工:您管理所有员工的详细信息
  2. AssignProject:,说明分配给哪个项目的员工
  3. Shift:说明员工在哪个班次工作
  4. 项目:您管理所有项目详情
  5. 我想计算employee的总津贴。例如。 EmployeeA3 Shift 上的项目A 上工作3天。我该怎么做SQL?

    更新: 我尝试了以下操作,它设法让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();
    

1 个答案:

答案 0 :(得分:0)

首先我建议您使用参数化查询 - 这很容易受到SQL注入的攻击。<​​/ p>

话虽如此,假设你使用的是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 
祝你好运。