<?xml version="1.0" encoding="utf-8" ?> <sqlMap> <resultMap id="project-category-user" class="ProjectReport" GroupBy="ProjectID"> <result property="ProjectName" column="ProjectName" /> <result property="EstimateHours" column="ProjectEstimate" type="float"/> <result property="EstimateCompletion" column="ProjectCompletion" type="DateTime" /> <result property="Categories" type="TList" resultMapping="category-user-report" /> </resultMap> <resultMap id="category-user-report" class="CategoryReport" GroupBy="CategoryID" > <result property="CategoryName" column="CategoryName" /> <result property="EstimateHours" column="CategoryEstimate" type="float" /> <result property="members" type="array" resultMapping="member-report" /> </resultMap> <resultMap id="member-report" class="array"> <result property="username" column="Username" /> <result property="hours" column="ActualDuration" type="float" /> </resultMap> <select id="GetTimeReportByProjectIDs" resultMap="project-category-user"> SELECT categories.Name as CategoryName, categories.CategoryID as CategoryID, project.ProjectID as ProjectID, categories.EstimateDuration as CategoryEstimate, project.Name as ProjectName, project.EstimateDuration as ProjectEstimate, project.CompletionDate as ProjectCompletion, time_entry.UserID as Username, SUM(time_entry.Duration) as ActualDuration FROM project LEFT JOIN categories ON categories.ProjectID = project.ProjectID LEFT JOIN time_entry ON categories.CategoryID = time_entry.CategoryID WHERE project.ProjectID IN ( $value$ ) GROUP BY categories.ProjectID, categories.CategoryID, time_entry.UserID ORDER BY project.ProjectID </select> <resultMap id="time-entry-user-report" class="UserReport" GroupBy="Username"> <result property="Username" column="Username" /> <result property="Projects" resultMapping="project-user-report" /> </resultMap> <resultMap id="project-user-report" class="UserProjectReport"> <result property="ProjectName" column="ProjectName" /> <result property="CategoryName" column="CategoryName" /> <result property="Duration" column="Duration" type="float" /> <result property="Description" column="Description" /> <result property="ReportDate" column="EntryDate" type="DateTime" /> </resultMap> <select id="GetTimeReportByUsername" resultMap="time-entry-user-report"> SELECT users.Username, project.Name as ProjectName, categories.Name as CategoryName, time_entry.Duration, time_entry.Description, time_entry.EntryDate FROM users LEFT JOIN time_entry ON time_entry.UserID = users.Username AND time_entry.EntryDate BETWEEN #startDate, typeHandler=DateTime# AND #endDate, typeHandler=DateTime# LEFT JOIN categories ON time_entry.CategoryID = categories.CategoryID LEFT JOIN project ON categories.ProjectID = project.ProjectID AND project.ProjectID in ($projects$) WHERE users.Username in ($members$) ORDER BY users.Username ASC, time_entry.EntryDate ASC, project.Name ASC, categories.Name ASC </select> </sqlMap>