2017-04-13 77 views
-1

這是表結構輸出將多個行值組合到一個列中。

first image

我要合併所有的包和組件,具有輸出象下面這樣:

second image

+0

考慮處理應用程序代碼中顯示的數據問題 – Strawberry

+0

輸出中組件的順序對您來說是否重要? –

+0

是的,因爲它被鏈接到輸入日期。所以它應該是在ASC的ID或DESC編號 –

回答

0

你可以使用CASE語句,它會解決你的問題當組件數量修復時

SELECT package, 
(CASE WHEN COMPONENT = 'WATER' THEN MARKS END) AS WATER, 
(CASE WHEN COMPONENT = 'AIR' THEN MARKS END) AS AIR, 
(CASE WHEN COMPONENT = 'FIRE' THEN MARKS END) AS FIRE 
FROM TABLE_NAME; 
+0

該組件將是動態的,但我嘗試使用兩個組件,我只獲取輸出包,組件和標記沒有顯示。 –

+0

@RiteshSharma我不敢相信,你能分享輸出和查詢。 –

+0

我解決了錯誤,但輸出是這樣的。 –

0

您只需要PIVOT表格。它給一點點其他演示文稿,但嘗試這一個 -

SELECT 
    t.Package, 
    MAX(IF(t.Component = 'WATER', t.Marks, NULL)) AS Water, 
    MAX(IF(t.Component = 'AIR', t.Marks, NULL)) AS Air, 
    MAX(IF(t.Component = 'FIRE', t.Marks, NULL)) AS Fire 
FROM 
    table t 
GROUP BY 
    t.Package; 
+0

該組件將是動態的,它不固定到3組件。考慮到我已經包含三個組件的例子。 –

+0

<?php include'connect-db.php';我們可以通過下面的例子來說明如何使用這個函數:$ query =「SELECT t.package_no,MAX(IF(t.work_component ='$ work_component',t.daily_progress,NULL) $ result = mysql_query($ query)或die(mysql_error()); while($ row = mysql_fetch_array($ result)){ echo $ row ['package_no']; echo $ row ['work_component']; echo $ row ['daily_progress']; } ?> –

+0

我已經運行您的代碼,它只顯示包裹細節,組件和標記<-> daily_progress。它給錯誤。未定義索引 –

0

假設該組件會出現在該行取決於它出現在表中,你可以計算出該行的編號爲串聯僞鍵,然後應用順序一組由

/* 
DROP TABLE IF EXISTS T; 
CREATE TABLE T (ID INT AUTO_INCREMENT PRIMARY KEY,PACKAGE VARCHAR(10),COMPONENT VARCHAR(10), MARKS INT); 

INSERT INTO T (PACKAGE,COMPONENT,MARKS) VALUES 
('02ABC','WATER',20),('02ABC','WATER',15),('02ABC','AIR',16),('02ABC','AIR',18),('02ABC','AIR',6), 
('02ABC','WATER',5), 
('02MNO','WATER',10),('02MNO','AIR',5),('02MNO','FIRE',15); 
*/ 

SELECT S.PACKAGE, 
     #S.OCCURANCE, 
     MAX(CASE WHEN S.COMPONENT = 'WATER' THEN S.MARKS ELSE 0 END) WATER, 
     MAX(CASE WHEN S.COMPONENT = 'AIR' THEN S.MARKS ELSE 0 END) AIR, 
     MAX(CASE WHEN S.COMPONENT = 'FIRE' THEN S.MARKS ELSE 0 END) FIRE 
FROM 
(
SELECT T.ID,T.PACKAGE,T.COMPONENT,T.MARKS, 
     IF(CONCAT(T.PACKAGE,T.COMPONENT) <> @P ,@OCCURANCE:=1,@OCCURANCE:[email protected]+1) OCCURANCE, 
     @P:=CONCAT(T.PACKAGE,T.COMPONENT) P 
FROM (SELECT @OCCURANCE:=0,@P:='') O,T 
ORDER BY T.PACKAGE,T.COMPONENT,T.ID 
) S 
GROUP BY S.PACKAGE,S.OCCURANCE 
相關問題