2017-10-18 2 views
-1

合計列から値を選択し、結果を計算列にランク付けする表を持っていますが、計算列は実際の列ではないため、計算された列から同じ値を同じ表の実数列にコピーします。SQLステートメントは、実際の列をランク付けされた仮想列の値で更新する

private void classStatistics(){ 
    try{ 

    String sql ="select s1.Name as 'Pupil',s1.Maths_Total as 'Total Score'," 
    + "s1.Maths_G as 'Grade',s1.Maths_R as 'Remark',s1.maths_Pos AS 
    'Position',COUNT(DISTINCT s2.maths_Total) AS Rank from class1 s1 JOIN 
    class1 s2 on(s1.maths_Total<=s2.maths_Total)GROUP BY s1.ID order by s1.Name 
    ASC "; 

    pst=conn.prepareStatement(sql); 
    rs=pst.executeQuery(); 
    class1_statistics.setModel(DbUtils.resultSetToTableModel(rs)); 



    } 
    catch(Exception e){ 
    e.getMessage(); 
    } 
    finally{ 
    try{ 
    rs.close(); 
    pst.close(); 
    } 
    catch(Exception e){ 
     } 
    } 
    class1Entry(); 
    } 

これは、計算された列をRankとして作成し、Positionという名前の列を計算されたRankされた列と同じ値で更新したいとします。 私はこのコードを書いています。私の選択した列「Maths_Pos」

private void getPosition(){ 
    try{ 
    String sql= "Update class1 set Maths_Pos=(SELECT COUNT(DISTINCT 
s2.maths_Total) AS Rank from class1 s1 JOIN class1 s2 
on(s1.maths_Total<=s2.maths_Total)GROUP BY s1.ID order by s1.Name ASC)"; 
    pst=conn.prepareStatement(sql); 
    pst.execute(); 
    }catch(Exception e){ 

    } 
finally{ 
      try{ 
       rs.close(); 
       pst.close(); 
      } 
      catch(Exception e){ 
      } 
     } 
    } 

に私の更新のための

//このだが、これは行うことは、残りのすべての行の最初の行のちょうど最初のランク値を繰り返すことです。したがって、列に異なる値を持たせる代わりに、列のすべての行で同じ値を実行する必要があります。あなたのアップデートで

+0

リットルで結果を「位置column」を更新することです。あなたはそれを編集して、サンプルデータと、あなたがここに関係していると思われる生のSQLクエリーを含めることができますか? –

+0

人々に試して読んでもらう場合は、コードを正しくインデントしてください。 – khelwood

答えて

0

String sql= "Update class1 set Maths_Pos=(SELECT COUNT(DISTINCT 
s2.maths_Total) AS Rank from class1 s1 JOIN class1 s2 
on(s1.maths_Total<=s2.maths_Total)GROUP BY s1.ID order by s1.Name ASC)"; 

あなたのサブ選択は、あなたの外側のクエリに相関していません。

は、エイリアスは外部クエリでのClass1とグループ化列(複数可)に関連付ける必要があります:私は「結果の合計列」からの結果をランク付けしますランク列を作成しようとしています

String sql= "Update c set Maths_Pos=(SELECT COUNT(DISTINCT 
s2.maths_Total) AS Rank from class1 s1 JOIN class1 s2 
on s1.maths_Total<=s2.maths_Total WHERE s1.ID=c.ID GROUP BY s1.ID order by s1.Name ASC) FROM class1 c "; 
+0

次のようなSQL例外が発生します。java.sql.SQLException:near "FROM":構文エラー –

0


:これは以下の表を表示し

private void classStatistics(){ 
    try{ 

    String sql ="select s1.Name as 'Pupil',s1.Maths_Total as 'Total Score'," 
      + "s1.Maths_G as 'Grade',s1.Maths_R as 'Remark',s1.maths_Pos AS 'Position',COUNT(DISTINCT s2.maths_Total) AS Rank from class1 s1 JOIN class1 s2 on(s1.maths_Total<=s2.maths_Total)GROUP BY s1.ID order by s1.Name ASC "; 

    pst=conn.prepareStatement(sql); 
    rs=pst.executeQuery(); 
    class1_statistics.setModel(DbUtils.resultSetToTableModel(rs)); 



    } 
    catch(Exception e){ 
    e.getMessage(); 
    } 
    finally{ 
    try{ 
    rs.close(); 
    pst.close(); 
    } 
    catch(Exception e){ 
     } 
    } 
    class1Entry(); 
    } 

:私は「結果の合計列」の値を計算し、このコードの「ランク列」にランクを表示する仮想列を作成するために管理しました

<table border="1" style="width:100%"> 
 
    <tr> 
 
    <th>Pupil</th> 
 
    <th>Total Score</th> 
 
    <th>Grade</th> 
 
    <th>Remark</th> 
 
    <th>Position</th> 
 
    <th>Rank</th> 
 
    </tr> 
 
    <tr> 
 
    <td>Jill</td> 
 
    <td>73%</td> 
 
    <td>B</td> 
 
    <td>Very Good</td> 
 
    <td></td> 
 
    <td>2</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Mary</td> 
 
    <td>90%</td> 
 
    <td>A</td> 
 
    <td>Excellent</td> 
 
    <td></td> 
 
    <td>1</td> 
 
    </tr> 
 
    <tr> 
 
    <td>James</td> 
 
    <td>50%</td> 
 
    <td>D</td> 
 
    <td>Average</td> 
 
    <td></td> 
 
    <td>3</td> 
 
    </tr> 
 
</table>
は、私は何をしたいあなたの質問に従わない計算列「ランク」

関連する問題