-2

MS Visual Studio 2010 C# を使用する学校のプロジェクトがあります。プロジェクトは、プロジェクト管理ソフトウェアです。基本的には勤務するシフトに応じて従業員に手当が与えられる多くのプロジェクトを管理していました。私は自分のプロジェクトに合計 4 つのテーブルを持っています。

  1. 従業員:すべての従業員の詳細を管理する場所
  2. AssignProject:どの従業員がどのプロジェクトに割り当てられたかを示す場所
  3. シフト:従業員がどのシフトで働いているかを示す場所
  4. プロジェクト: プロジェクトのすべての詳細を管理する場所

の総手当を計算したいemployee。例えば。別のShiftのプロジェクト A のEmployeeA稼働3日。その上でSQLを実行するにはどうすればよいですか?3

更新: 私は次のことを試しました。それは 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 に答える