2017-04-13 27 views
-1

これは私が以下のような出力で、すべてのパッケージとコンポーネントをマージするテーブル構造の出力複数の行の値を1つの列にまとめる。

first image

です:

second image

+0

アプリケーションコード内のデータ表示の取り扱いに関する考慮事項 – Strawberry

+0

出力のコンポーネントの順序はあなたに関係しますか? –

+0

はい、入力された日付にリンクされています。だから、IDでの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

そのコンポーネントは動的ですが、私は2つのコンポーネントで試しました。出力のみのパッケージを取得しています。コンポーネントとマークは表示されません。 –

+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つのコンポーネントに固定されません。この例を考えると、私は3つのコンポーネントを含んでいます。 –

+0

<?php には 'connect-db.php'が含まれています。$ query = "SELECT t.package_no、MAX(IF(t.work_component = '$ work_component'、t.daily_progress、NULL))AS Sewer FROM daily_progress_demo t WHERE package_no = '$ package_no' GROUP BY t.package_no;"; $ 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 
関連する問題