全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1467
推到 Plurk!
推到 Facebook!

請問有這樣的SQL語法嗎??

答題得分者是:st33chen
carl168
一般會員


發表:7
回覆:16
積分:4
註冊:2004-02-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-05 16:38:15 IP:60.250.xxx.xxx 訂閱
在 SQL 中有以下二個表
學生基本資料
IDNAMESEX
1AM
2BF
3CF
4DM

學生成績表
IDSUBJECTSCORE
1國文70
1數學80
1英文85
2國文60
2數學88
2英文75
3國文90
3數學60
3英文65
4國文88
4數學70
4英文81

請問各位先進
要如何可以做到下表
姓名60-70學科60-70分數70-80學科70-80分數80-90學科80-90分數
A國文70 數學80
英文85
B國文60英文75數學88
C數學60 國文90
英文65
D 數學70國文88
英文81




st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-05 21:03:02 IP:122.116.xxx.xxx 未訂閱
您好,

都已經 24 次閱讀過還沒有人回答, 我來試試.

我用 mysql 試過,
這是 sql 的主要部份
要顯示成和您的例子完全一樣的話,
可以自行轉成 html 或 csv
您應該可以輕易完成吧

SELECT NAME, SUBJECT1, SCORE1, SUBJECT2, SCORE2, SUBJECT3, SCORE3
FROM (
SELECT ID, SUBJECT SUBJECT1, SCORE SCORE1, ' ' SUBJECT2, 0 SCORE2, ' ' SUBJECT3, 0 SCORE3
FROM STUDENT_SCORE
WHERE SCORE BETWEEN 60 AND 69
UNION ALL
SELECT ID, ' ', 0, SUBJECT, SCORE, ' ', 0
FROM STUDENT_SCORE
WHERE SCORE BETWEEN 70 AND 79
UNION ALL
SELECT ID, ' ', 0, ' ', 0, SUBJECT, SCORE
FROM STUDENT_SCORE
WHERE SCORE BETWEEN 80 AND 89
) SCORES, STUDENT
WHERE SCORES.ID=STUDENT.ID
ORDER BY SCORES.ID, SUBJECT1 DESC, SUBJECT2 DESC, SUBJECT3 DESC

參考一下.

不過, 您 60-70, 70-80, 80-90 的這種分組法, 對我來說還真有點邏輯不適.
我的意思是, 70 分整不知要分到哪一組, 所以我改成 60-69, 70-79, 80-89

ah-ha
我查到 mysql 居然有 group_concat 函數可以和 group 一起用.
研究後再告訴您.

------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2008-11-05 21:04:31, 註解 無‧
st33chen 重新編輯於 2008-11-05 21:47:27, 註解 無‧
carl168
一般會員


發表:7
回覆:16
積分:4
註冊:2004-02-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-05 21:47:15 IP:118.160.xxx.xxx 訂閱
st33chen 您好,
很感謝您的回覆並指導。
依您指導的 SQL 語法,產生的表如下:
姓名60-69學科60-69分數70-79學科70-79分數80-89學科80-89分數
A 0 國文 70 0
0 0數學80
0 0英文85
B國文60 0 0
0英文75 0
0 0數學88
C數學60 0 0
英文65 0 0
D 0數學70 0
0 0國文88
0 0英文81

再請問一下,
若以A為例,國文和數學可以同行嗎?
而以B為例,有沒有可能只出現一行,而不是三行?
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-11-05 22:01:25 IP:122.116.xxx.xxx 未訂閱
用一個 sql 達成您的要求我現在還在想

若是用 delphi 來處理, 則可以用 tquery 取出資料後
while not query1.eof do begin

end;
重新整理, 可能要一些 if 命令
我現在沒空實做, 對不起
請先自己 try 吧

如果 不是用 sql 來解決, 可以參考以下 url 中我的解法部份,
http://delphi.ktop.com.tw/board.php?cid=30&fid=1498&tid=95725


------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2008-11-06 09:18:08, 註解 無‧
carl168
一般會員


發表:7
回覆:16
積分:4
註冊:2004-02-18

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