2012-02-29 10 views
1

WebページのListコントロールに表示する必要がある特定のクエリの結果があります。適切に表示するようにSQLクエリ結果を並べ替える

クエリ1つの結果:
4 items in descending order
クエリ2結果:
Top 1 result

は実際に、私は、最初のクエリから2番目のクエリの最初の結果を最初の結果を表示する必要があり、その後、残りの最初のクエリ結果から3つ。

最初は、行を並べ替えることを考えましたが、個々の行を変更することはできないため、私が想定しているデータコントロールの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)

任意の提案ですか?

EDIT

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

+0

@Omkarpanhalkar次のようになります。例を追加しました – Cipher

+0

両方の結果が同じであるの列ですか? – PraveenVenu

答えて

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に戻るように、ビューステートのDataTableのフォーマットを作成する必要があります。 EXEXMPLE:

DataRowを使用してデータ結果を制御できるはずです。 EXEMPLE:

  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

第1クラスの「第1」は常に全体リストの先頭にとどまり、第2クラスの第1クラスは常に全体リストの第2位にとどまっていなければなりません。だから、全体的な組合とソートは私には良いことではありません。もしかしたらトップ2の場所を交換することができますか? : -/ – Cipher

+0

答えを – PraveenVenu

+0

で更新しましたBy By and unionは最初の 'select'クエリ – Cipher

関連する問題