線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1797
推到 Plurk!
推到 Facebook!

請教一個sql語法的問題

尚未結案
Darkn
一般會員


發表:5
回覆:10
積分:3
註冊:2003-02-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-31 18:00:58 IP:61.220.xxx.xxx 未訂閱
各位高手... 請教各位一個問題,現在有一個table 欄位有班級 學生 成績 請問一下 我有什麼辦法可以在sql sever 底下 取出每個班級 前十名的學生 我最近有個程式需要用到這種功能 但是一直想不出比較好的方法 除了union以外... 不知道各位有什麼好方法 麻煩指導一下
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-31 18:18:31 IP:218.16.xxx.xxx 未訂閱
不同的數據庫語法不同的,你是用那一種數據庫及那些數據庫元件的?
Darkn
一般會員


發表:5
回覆:10
積分:3
註冊:2003-02-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-31 18:26:49 IP:61.220.xxx.xxx 未訂閱
我用的是 MS 的 SQL Sever 2000...
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-31 18:47:44 IP:61.217.xxx.xxx 未訂閱
SELECT TOP 10 班級,學生,成績 FROM Table ORDER BY 班級,學生 TRY TRY SEE 發表人 - chih 於 2003/03/31 19:13:11
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-31 19:03:21 IP:218.16.xxx.xxx 未訂閱
對不起,問了你用甚麼資料庫,仔細想想才發覺自己想不到一個可行的 sql 語法,因為 top X 只能傳回整體的 x 個記錄而非每班級的 x 個記錄。 我只想到,如果你可以新增一個欄位先行計算名次,之後的報表就會好辦很多。 還是留待這裡眾多的數據庫高手來分享更直接的答案罷。
Darkn
一般會員


發表:5
回覆:10
積分:3
註冊:2003-02-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-31 19:15:51 IP:61.220.xxx.xxx 未訂閱
-------------------------------------------------- SELECT TOP 10 班級,學生,成績 FROM Table ORDER BY 學生 TRY TRY SEE -------------------------------------------------- 不好意思 這樣會取出前十個學生ㄋㄟ
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-31 20:08:39 IP:61.217.xxx.xxx 未訂閱
SELECT TOP 10 班級,學生,成績 FROM Table ORDER BY 班級,學生
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-31 21:48:49 IP:218.32.xxx.xxx 未訂閱
一個 SQL 很難辦到 ( 考慮使用 Stored Procedure ). 二個 SQL 很好辦. ( 多一個 SQL 粉難過嗎? ) 1. select distinct 班級. 2. select top 10 ....    ps. Oracle 的話, 比較有希望用一個 SQL 搞定(use "Cursor" function).    
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-31 22:15:35 IP:61.221.xxx.xxx 未訂閱
應該是很難用一個 sql 辦到的, 試試用 cursor 的方式來處理看看:
set nocount on;
Declare @class_id varchar(20) --班級的欄位
create table #tmp_sort
(
  姓名 varchar(20),
  學號 varchar(10),
  班級 varchar(20),
  成績 int
)    Declare class_cursor Cursor for
select distinct 班級 from table1 order by 班級    OPEN class_cursor    FETCH NEXT FROM class_cursor 
INTO @class_id    WHILE @@FETCH_STATUS = 0
BEGIN
  insert into #tmp_sort
  select top 10 姓名, 學號, 班級, 成績 from table1 where 班級 = @class_id order by 成績      FETCH NEXT FROM class_cursor 
     INTO @class_id
END    CLOSE class_cursor
DEALLOCATE class_cursor    select * from #tmp_sort    drop table #tmp_sort
shpeng
初階會員


發表:6
回覆:67
積分:49
註冊:2002-12-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-04-01 08:53:37 IP:61.219.xxx.xxx 未訂閱
 
/*
--Table 結構表
CREATE TABLE grade
        (姓名 VARCHAR(20)
        ,學號 VARCHAR(10)
        ,班級 VARCHAR(20)
        ,成績 INT
        ,名次 INT)
CREATE INDEX grade_index 
    ON grade  (班級,成績)
*/
--填入名次
DECLARE @班級 VARCHAR(20)
DECLARE @SortID INT
UPDATE grade 
        SET         名次=@SortId
                ,@SortId = (CASE 班級 WHEN @班級 THEN @SortId   1 ELSE 1 END)
                ,@班級 = 班級
--輸出
SELECT * FROM grade WHERE 名次 <= 3 ORDER BY 班級,名次
今天你發現了什麼
------
==取之於斯,用之於斯==
Darkn
一般會員


發表:5
回覆:10
積分:3
註冊:2003-02-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-04-01 09:21:46 IP:61.220.xxx.xxx 未訂閱
謝謝各位的幫忙.. 問題已經解決了 謝謝
系統時間:2024-11-23 9:57:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!