2017-09-12 78 views
0

我有一個表subject其中列subject code,user_idgrade。我還有一張學生桌。放置學生的所有成績1

學生表:

| user_id | name | 
+---------+------+ 
| 17000 | elle | 

主題表:

| subjcode | user_id | grade | 
+----------+---------+-------+ 
| os1  | 17000 | 90 | 
| micro | 17000 | 90 | 

什麼是正確的查詢,以便輸出將這個樣子?

| user_id | os1 | micro1 | 
+---------+-----+--------+ 
| 17000 | 90 | 90  | 
+1

'選擇stu.user_id,sub.os1,sub.micro FROM Student stu JOIN Subject sub ON stu.user_id = sub.User_Id'應該讓你關閉 –

+0

它被稱爲動態數據透視表,我之前有同樣的問題,並提供了一個答案:https ://stackoverflow.com/questions/12667699/sql-query-fields-as-columns –

+0

A「主題」表絕不會像那。那張桌子是別的,也許是'student_subject'。無論如何l,要回答你的問題,認真考慮處理應用程序代碼中的數據顯示問題。 – Strawberry

回答

1

這需要你從結果多線一條線,這是不容易被SQL查詢處理相結合。另外,你不能得到可變數量的字段作爲結果(如果有5個主題事項)。最好在顯示級別用適當的語言處理。

當然一個存儲過程將做到這一點,但是這是:-)

+0

所以爲了使這個輸出我需要爲主題創建另一個表格? 謝謝 –

+0

這怎麼是一個可以接受的答案? – dat3450

+0

@ dat3450我認爲這就是OP應該做的事情 – Strawberry

0

完全是另外一個主題從SQL Query fields as columns之前我自己的問題的基礎,你的代碼看起來像這樣的事情:

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'MAX(case when subjcode = ''', 
     subjcode, 
     ''' then grade end) AS ', 
     subjcode 
    ) 
) INTO @sql 
FROM subject_table; 

SET @sql = CONCAT('SELECT s.name, ', @sql, ' 
        FROM student_table s 
        LEFT JOIN subject_table AS g 
        ON s.user_id = g.user_id 
        GROUP BY s.name'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
相關問題