【问题标题】:Select within select at 'DataTable' with grouping通过分组在“DataTable”中选择
【发布时间】:2014-03-18 20:10:05
【问题描述】:

我正在尝试在 select group 语句中执行 select 以对数据进行分组,但我不确定如何在 DataTable 中执行此操作。

我的数据库如下所示:

Breed, Name, DOB
Dog, Bob, 1/1/2012
Cat, Ben, 4/7/2012
Cat, Max, 24,1,1978
Dog, Rex, 15,9, 2000
Horse, Sue, 13/3/1999
Horse, Robby, 24,1,1990
Dog, Brodie, 24,1,1988

我在 ASPX 母版页上的输出是:

Dog
Bob, 1/1/2012
Rex, 15,9, 2000
Brodie, 24,1,1988

Cat
Cat, Ben, 4/7/2012
Cat, Max, 24,1,1978

Horse
Sue, 13/3/1999
Robby, 24,1,1990

到目前为止我没有分组的是:

<asp:Repeater ID="Pets" runat="server" OnItemDataBound="PetsData">
  <ItemTemplate>
    <h3><%# Eval("Breed") %></h3>
    <p><%# Eval("Name") %> (<%# Eval("DOB") %>)</p>
  </ItemTemplate>
</asp:Repeater>

private DataTable bindData3()
{
    string sql = @"SELECT * FROM Pets";

    DataTable dr = SqlHelper.ExecuteQuery(sql);

    Pets.DataSource = dr;
    Pets.DataBind();
    return dr;
}

protected void PetsData(object sender, RepeaterItemEventArgs e)
{
}

任何人都可以帮助对上述数据进行分组吗?


编辑:我想我是在嵌套中继器之后,所以标题/品种显示一次,然后列出它的所有子项。有人可以帮忙吗?

【问题讨论】:

    标签: c# asp.net sql datatable


    【解决方案1】:

    您应该可以使用DataTable.Select 实现此目的

    类似于 SQL 中的ORDER BY 子句。您可以按品种对数据进行排序,以便将同一品种放在一起。

    然后,当您逐行遍历整个表格时,您可以检查您正在阅读的品种是否与前一个不同。如果不同,请先打印出品种,然后再打印出您的数据。

    【讨论】:

      【解决方案2】:

      试试这个

      select p.Breed, c.Name, c.DOB
      from
      (
          select distinct Breed
          from Pets
      ) p inner join Pets c on (c.Breed = p.Breed)
      

      【讨论】:

        【解决方案3】:

        试试这个。

        SELECT * FROM [dbo].[Pets] 按品种、名称、出生日期分组

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-05-30
          • 1970-01-01
          • 1970-01-01
          • 2016-07-29
          • 2013-04-29
          • 2022-01-05
          • 1970-01-01
          相关资源
          最近更新 更多