在选择“数据表”中选择'与分组

时间:2014-03-18 20:10:06

标签: c# asp.net sql datatable

我正在尝试在选择组语句中进行选择以对数据进行分组,但我不确定如何在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)
{
}

有人可以帮助解决上述问题吗?


编辑:我认为我是在嵌套转发器之后,因此标题/品种会显示一次,之后会列出所有子项目。任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

您应该可以使用DataTable.Select

来实现这一目标

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

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

答案 1 :(得分:0)

试试这个

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

答案 2 :(得分:0)

试试这个。

SELECT * FROM [dbo]。[Pets] Group by Breed,Name,DOB