ModuleStaff
( 、Staff
、 )から取得する 3 つのテーブルがありRoles
ます。私がやろうとしているのは、データをグリッドビューに 1 行で表示することです。たとえば、staff(adrian)
グループ番号 1 と 2 の担当者は次のように表示されます。
StaffName | RoleName | GroupNumber
Adrian | Lecturer | 1,2
現在、チューターとリーダーのデータベースデータが空白であっても、同じstaff(adrian)
ロール名で問題が発生しています。groupnumbers (1 and 2)
私が今得たもの:
StaffName | RoleName | GroupNumber
Adrian | Lecturer | 1,2
Adrian | Tutor | 1,2
Adrian | Leader | 1,2
あるべき姿:
StaffName | RoleName | GroupNumber
Adrian | Lecturer | 1,2
Adrian | Tutor |
Adrian | Leader |
これが私のコードです:
public DataTable DisplayModuleStaffGroup(string year, string module, string diploma)
{
try
{
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MARSConnectionString"].ConnectionString))
{
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = "SELECT ms.ModuleCode, ms.ModuleYear, ms.DiplomaID, sr.RoleName, s.StaffName, s.StaffStatus, GroupNumber = ";
cmd.CommandText += " substring((SELECT ( ', ' + GroupNumber ) FROM ModuleStaff ms2, Staff s2 ";
cmd.CommandText += " WHERE ms.StaffID = ms2.StaffID AND ms2.StaffID = s2.StaffID ";
cmd.CommandText += " ORDER BY s2.StaffName, ms2.GroupNumber ";
cmd.CommandText += " FOR XML PATH( '' )), 3, 1000) ";
cmd.CommandText += " FROM ModuleStaff ms ";
cmd.CommandText += " INNER JOIN StaffRoles sr ON ms.RoleID = sr.RoleID ";
cmd.CommandText += " INNER JOIN Diploma d ON ms.DiplomaID = d.DiplomaID ";
cmd.CommandText += " INNER JOIN Staff s ON ms.StaffID = s.StaffID ";
cmd.CommandText += " WHERE (ms.DiplomaID = @dip) AND (ms.ModuleYear = @year) AND (ms.ModuleCode = @code) ";
cmd.CommandText += " ORDER BY ms.RoleID DESC ";
cmd.Parameters.AddWithValue("@dip", diploma);
cmd.Parameters.AddWithValue("@year", year);
cmd.Parameters.AddWithValue("@code", module);
DataSet dSet = new DataSet();
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(dSet, "DisplayModuleStaffGroup");
return dSet.Tables["DisplayModuleStaffGroup"];
}
}
}
}
catch
{
throw;
}
finally
{
}
}
rolename
およびに基づいてグループ番号を取得するために、XML パス/SQL ステートメントをクエリする方法がよくわかりませんstaffname
。誰でもこれについて私を助けることができますか? ありがとうございました。