sql >> データベース >  >> Database Tools >> phpMyAdmin

特定の列のグループに表示するSQLステートメント

    当初、これは私が思いついたものです:

    SELECT s.date, s.day, COALESCE(GROUP_CONCAT(bm.worker SEPARATOR ' '),'') as Morning,COALESCE(GROUP_CONCAT(be.worker SEPARATOR ' '),'') as Evening
    FROM schedule s LEFT JOIN 
    block bm ON s.id = bm.schedule_id AND bm.shift=1 LEFT JOIN 
    block be ON s.id = be.schedule_id AND be.shift=2
    GROUP BY s.date,s.day
    

    結果:

    DATE        DAY       MORNING       EVENING
    22/09/2014  Monday    Ahmad Abdul   Faris Faris
    23/09/2014  Tuesday                 Iqbal
    

    結果はフィドルになります。 。

    ご覧のとおり、イブニングフィールドにはファリスが2回含まれています 。そこで、2つのクエリを使用して、それらの結果を結合しました。このように:

    SELECT T1.date,T1.day,COALESCE(T1.Morning,'') as Morning,COALESCE(T2.Evening,'') as Evening FROM
        (SELECT s.date, s.day, GROUP_CONCAT(bm.worker SEPARATOR ' ') as Morning
         FROM schedule s LEFT JOIN 
         block bm ON s.id = bm.schedule_id AND bm.shift=1
         GROUP BY s.date,s.day) T1
      JOIN
        (SELECT s.date, s.day,GROUP_CONCAT(be.worker SEPARATOR ' ') as Evening
         FROM schedule s LEFT JOIN 
         block be ON s.id = be.schedule_id AND be.shift=2
         GROUP BY s.date,s.day) T2 
      ON T1.Date=T2.Date AND T1.Day=T2.Day
    

    結果:

    DATE        DAY      MORNING        EVENING
    22/09/2014  Monday   Ahmad Abdul    Faris
    23/09/2014  Tuesday                 Iqbal
    

    SQL Fiddleの結果を参照してください。

    説明:

    朝と夕方を別々に選択し、これら2つのテーブルを日付と曜日で結合します。そして最後に、結合されたクエリから結果がフェッチされます。

    GROUP_CONCAT 同じ日付と日付のフィールドをグループ化するために使用されます。 SEPARATOR ' 'を使用できます セパレータとしてのスペース用。 SEPARATOR ' 'を削除した場合 、コンマ(、)で区切られた結果が得られます。

    COALESCE null値を空の文字列に置き換えるために使用されます(''



    1. GoogleAppEngineにphpMyAdminをインストールします

    2. mysql:mysqlテーブルの列内の要素の出現回数で順序付け

    3. MySQL#1054不明な列

    4. phpMyAdmin致命的なエラー:未定義の関数の呼び出し__()