你好,因爲阿貝塞告訴你在你的問題的解決方案是擺動表。
這裏查詢你的表
SELECT Sno, firstName,
SUM(CASE WHEN Subject = 'Eng' THEN Marks ELSE NULL END) AS Eng,
SUM(CASE WHEN Subject = 'Hindi' THEN Marks ELSE NULL END) AS Hindy,
SUM(CASE WHEN Subject = 'Telgu' THEN Marks ELSE NULL END) AS Telgu
FROM t1
GROUP BY firstName
ORDER BY Sno
這裏是SQL Fiddle,看看它是如何工作的?
GL!
編輯:
好吧基於thisbluefeet答案這裏是動態的解決方案爲您的問題
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
CONCAT('SUM(CASE WHEN Subject = ''',
Subject,
''' THEN Marks ELSE NULL END) AS ',
REPLACE(Subject, ' ', ''))) INTO @sql
FROM t1;
SET @sql = CONCAT('SELECT Sno, firstName, ', @sql, '
FROM t1
GROUP BY firstName
ORDER BY Sno');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
這
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
CONCAT('SUM(CASE WHEN Subject = ''',
Subject,
''' THEN Marks ELSE NULL END) AS ',
REPLACE(Subject, ' ', ''))) INTO @sql
FROM t1;
第一部分是動態的創建這個第一個查詢的一部分,我寫了
SUM(CASE WHEN Subject = 'Eng' THEN Marks ELSE NULL END) AS Eng,
SUM(CASE WHEN Subject = 'Hindi' THEN Marks ELSE NULL END) AS Hindy,
SUM(CASE WHEN Subject = 'Telgu' THEN Marks ELSE NULL END) AS Telgu
第二部分是創建準備好的聲明,並動態創建的部分包括到這個
SELECT Sno, firstName,
-- here you add dynamically created part @sql
FROM t1
GROUP BY firstName
ORDER BY Sno
你
,隨着代碼
SET @sql = CONCAT('SELECT Sno, firstName, ', @sql, '
FROM t1
GROUP BY firstName
ORDER BY Sno');
當您創建
這部分CONCAT從那個字符串中準備陳述並執行它
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
希望,現在是一點點清晰......
這裏是SQL Fiddle所以你可以看到,你可以比較這兩個查詢,看看它是如何工作..
GL!
P.S.如果您有任何問題請填寫評論以下內容
你需要澄清你的問題多一點......你的問題是從這些表中獲取'distinct firstnames'? –
請清除問題,也請嘗試製作表格格式以顯示錶格。未分類的表格數據看起來非常糟糕,不可讀。 –
[MySQL pivot row into dynamic number of columns](http:// stackoverflow。com/questions/12004603/mysql-pivot-row-into-dynamic-number-of-columns)或[包含'mysql dynamic pivot'的帖子](http://stackoverflow.com/search?q=mysql+dynamic+pivot )。 – Abecee