sql >> データベース >  >> RDS >> Mysql

複数の結合されたテーブルでのMySQLGROUP_CONCATまたはPIVOTの使用

    これがモックです-PIVOT rownumを適用する 先生方へ:

    select s.col_entry,
      max(case when s.col_inquiry_name = 'Title' then s.col_value end) AS 'Title',
      max(case when s.col_inquiry_name = 'Course' then s.col_value end) AS 'Course',
      max(case when b.col_inquiry_name = 'Description' then b.col_value end) AS 'Description',
      max(case when d.col_inquiry_name = 'Semester' then d.col_value end) AS 'Semester',
      max(case when s.col_inquiry_name = 'Location' then s.col_value end) AS 'Location',
      max(case when tch.grp = 'Teachers_01' then tch.col_value end) AS 'Teachers_01',
      max(case when tch.grp = 'Teachers_02' then tch.col_value end) AS 'Teachers_02',
      max(case when tch.grp = 'Teachers_03' then tch.col_value end) AS 'Teachers_03',
      max(case when tch.grp = 'Teachers_04' then tch.col_value end) AS 'Teachers_04',
      max(case when tch.grp = 'Teachers_05' then tch.col_value end) AS 'Teachers_05'
    from smallText s
    left join bigText b
      on s.col_entry = b.col_entry 
    left join date d
      on b.col_entry = d.col_entry 
    left join
    (
      select col_entry, col_value, concat('Teachers_0', group_row_number) grp
      from
      (
        select col_entry, col_value,
          @num := if(@col_entry = `col_entry`, @num + 1, 1) as group_row_number,
          @col_entry := `col_entry` as dummy
        from smallText , (SELECT @rn:=0) r
        where col_inquiry_name = 'Teachers'
          and col_value != ''
      ) x
    ) tch
      on s.col_entry = tch.col_entry
    group by s.col_entry;
    

    SQL Fiddle withdemo を参照してください。

    col_orderで指定した追加フィールドに基づいて、#1を編集します rownumを使用せずに教師を決定するために使用できます 変数:

    select s.col_entry,
      max(case when s.col_inquiry_name = 'Title' then s.col_value end) AS 'Title',
      max(case when s.col_inquiry_name = 'Course' then s.col_value end) AS 'Course',
      max(case when b.col_inquiry_name = 'Description' then b.col_value end) AS 'Description',
      max(case when d.col_inquiry_name = 'Semester' then d.col_value end) AS 'Semester',
      max(case when s.col_inquiry_name = 'Location' then s.col_value end) AS 'Location',
      max(case when s.col_inquiry_name = 'Teachers'
            and s.col_order = 1 then s.col_value end) AS 'Teachers_01',
      max(case when s.col_inquiry_name = 'Teachers'
            and s.col_order = 2 then s.col_value end) AS 'Teachers_02',
      max(case when s.col_inquiry_name = 'Teachers'
            and s.col_order = 3 then s.col_value end) AS 'Teachers_03',
      max(case when s.col_inquiry_name = 'Teachers'
            and s.col_order = 4 then s.col_value end) AS 'Teachers_04',
      max(case when s.col_inquiry_name = 'Teachers'
            and s.col_order = 5 then s.col_value end) AS 'Teachers_05'
    from smallText s
    left join bigText b
      on s.col_entry = b.col_entry 
    left join date d
      on b.col_entry = d.col_entry 
    group by s.col_entry
    

    SQL Fiddle withDemo を参照してください。




    1. データベース設計-プッシュモデル、またはファンアウトオンライト

    2. selectステートメントでのMysqlの計算

    3. dbスキーマをdboに変更するにはどうすればよいですか

    4. SQL Serverの「rowversion」とは何ですか?