如何只显示一条记录 - 值最小的记录?

时间:2013-06-17 14:09:48

标签: asp.net sql-server

我希望这个帖子的标题有意义。

请看下面的截图。

enter image description here

上半部分显示了有两名已注册参加培训的用户的数据库。

默认情况下,座位容量为45座

  • 用户B注册后,剩下44个。

  • 然后userA注册,现在有43个座位可用。

到目前为止一切顺利。

但请看一下截图的下半部分。请注意,屏幕显示43个座位可用以及44个座位。这对我们的用户来说非常混乱。我们怎样才能显示最少的可用数量?换句话说,在每次注册后,仅显示代表剩余座位的数字。在上面的例子中,它将是43。

下次另一个用户注册时,该数字会减少1并变为42,这是我们希望根据用户注册该课程的位置以及课程日期显示的数字。

以下是我正在使用的代码。

如何调整它以显示最新数量,这是最小的可用座位数?

<asp:SqlDataSource ID="sqlDataSourceloc" runat="server" 
    ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" 
    SelectCommand="SELECT locationId, Location FROM tblLocations order by location asc"></asp:SqlDataSource>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:DBConnectionString %>" 
 SelectCommand="select DISTINCT l.LocationId,c.courseId, c.coursename, (case when isnull(t.availableSeats,30) = 0 then 'Class is full' 
                else  str(isnull(t.availableSeats,30)) end) availableSeats,d.dateid,d.trainingDates, d.trainingtime, c.CourseDescription,i.instructorName, l.location,l.seating_capacity 
                from tblLocations l
                Inner Join tblCourses c on l.locationId = c.locationId
                left join tblTrainings t on l.locationId = t.LocationId and c.courseId = t.courseId
                Inner Join tblTrainingDates d on c.dateid=d.dateid 
                Inner Join tblCourseInstructor ic on c.courseId = ic.CourseId  
                Inner Join tblInstructors i on ic.instructorId = i.instructorId" 
      FilterExpression="LocationId = '{0}'" >
<FilterParameters>
 <asp:ControlParameter ControlID="ddlLocation" Name="LocationId" 
  PropertyName="SelectedValue" Type="Int32" />
 </FilterParameters>
</asp:SqlDataSource>

2 个答案:

答案 0 :(得分:1)

当新用户注册课程时,您需要

UPDATE table_name
SET AvailableSeats = ...
WHERE TrainingID=... AND CourseId=...

而不是INSERT

应该只有一行具有唯一(DateId,LocationId,CourseId)值集。

答案 1 :(得分:1)

您可以尝试子查询来计算行数并从默认的容量席位中减去: