2012-02-29 72 views
1

我有一定的查询结果,我必须在我的网页的List控件中显示。重新排列sql查询结果以适当地显示

查询1个结果:
4 items in descending order
查询2结果:
Top 1 result

事实上,我有显示来自第一查询,从所述第二查询第一结果的第一结果,然后将余下三个来自第一个查询结果。我认为重新排列行,但是在Data控件的ItemTemplate中,我认为这是行不通的,因为单个行不能改变。

我是否应该以某种形式编写我的查询,以便按顺序给出结果,从而显示正确的项目顺序? 对于如:
Take the first result from top 4 item +
Find the second result +
Three items (minus the top one already that has been already extracted)

有什么建议?

编辑

1st class: (has 4 student) 

Tom (Has highest score) 
Rex (Hss second highest score) 
Rambo (HAs 3rd highest score) 
Betty (Has least score) 

2nd class: (has 1 student) 

Spooky (Has the highest score) 

Required result order in DataControl: 

Tom 
Spooky 
Rex 
Rambo 
Betty 
+0

查询Actally样品将是有益的 – om471987 2012-02-29 12:04:46

+0

@Omkarpanhalkar:添加了一个例子 – Cipher 2012-02-29 12:12:26

+0

都是结果的列是一样的吗? – PraveenVenu 2012-02-29 12:13:31

回答

1

这样你就可以从第一选择把首先从第一选择和第二从 第一,其他2;

首先查询返回:

public DataTable query1() 
{ 
       DataTable dt = new DataTable(); 

       #region YOUR SQL1 

       qs.Execute(); 
       dt = qs.Return; 

       return dt1; 
} 

public DataTable query2() 
{ 
       DataTable dt = new DataTable(); 

       #region YOUR SQL2 

       qs.Execute(); 
       dt = qs.Return; 

       return dt2; 
} 

您应该创建一个视图状态数据表格式,酷似从Slect你的DataTable中返回。 EXEXMPLE:

public DataTable _VS_RETURN_FORMAT 
{ 
    get 
    { 
     if (ViewState["_VS_RETURN_FORMAT] == null) 
     { 
      DataTable dt = new DataTable(); 
      dt.Columns.Add("field1"); 
      dt.Columns.Add("field2"); 

      ViewState["_VS_RETURN_FORMAT"] = dt; 
     } 
     return (DataTable)ViewState["_VS_RETURN_FORMAT"]; 
    } 
    set 
    { 
     ViewState["_VS_RETURN_FORMAT"] = value; 
    } 
} 

您应该能够使用DataRow控制数据表结果。例:

  DataTable dt1 = new DataTable(); 
     DataTable dt2 = new DataTable(); 

      dt1 = SelectQuery1(); 
      dt2 = SelectQuery2(); 


      //Create a new DataRow Like your ViewState 
      DataRow dr = _VS_RETURN_FORMAT; 


      //Adding to the fields the value that your need 

      dr["field1"] = dt1.Row[0][0]; 
      dr["field2"] = dt1.Row[0][1]; 


      _VS_RETURN_FORMAT.Rows.Add(dr); 

      dr["field1"] = dt2.Row[0][0]; 
      dr["field2"] = dt2.Row[0][1]; 

      _VS_RETURN_FORMAT.Rows.Add(dr); 

      dr["field1"] = dt1.Row[1][0]; 
      dr["field2"] = dt1.Row[1][1]; 

      _VS_RETURN_FORMAT.Rows.Add(dr); 

      dr["field1"] = dt1.Row[2][0]; 
      dr["field2"] = dt1.Row[2][1]; 

      _VS_RETURN_FORMAT.Rows.Add(dr); 
1
select top 1 Name ClassRank from Class1 order by Score desc 
union 
select top 1 Name ClassRank from Class2 order by Score desc 
union 
SELECT * FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY Score desc) AS rownumber  
    FROM Class1 
) AS foo 
WHERE rownumber >1 
+0

来自第一堂课的“第一”总是要保持在总榜的首位,而第二堂课的第一名总是要留在整个榜单的第二位。所以,整体联合和排序对我来说不会有什么好处。或者如果我能够以某种方式交换前两名? : -/ – Cipher 2012-02-29 12:31:08

+0

更新了答案 – PraveenVenu 2012-02-29 12:41:36

+0

Order By和union不能在第一个“select”查询中聚集在一起 – Cipher 2012-03-01 05:28:03