1

重複の可能性:
SQL「変換」クエリ

テーブルのさまざまな値を個別の列として表示する SQL ステートメントを作成する方法がわかりません。以下に例を示します。

Table A - Project
= = = = = = = = = = = = = =
ID | Project
= = = = = = = = = = = = = =
1  | Google

Table B - Tasks
= = = = = = = = = = = = = = = = = = = = = = = = = = = =
ID  | Project ID    | Task_name | Date Complete
= = = = = = = = = =  = = = = = = = = = = = = = = = = = =
1   |  1            | Build     | 10/30/12
2   |  1            | Revise    | 11/15/12
3   |  1            | Launch    | 11/30/12

SQL は次の形式で出力されます。

Website   | Build Date  | Revise Date   | Launch Date
= = = = = = = = = =  = = = = = = = = = = = = = = = = = =
Google    | 10/30/12    | 11/15/12      | 11/30/12  
4

2 に答える 2

2

これは a として知られてPIVOTいますが、MySQL にはPIVOT関数がありませんが、集計関数とCASEステートメントを使用して複製できます。

select p.project as website,
  max(case when t.task_name = 'build' then date_format(`Date Complete`, '%m/%d/%y') end) BuildDate,
  max(case when t.task_name = 'Revise' then date_format(`Date Complete`, '%m/%d/%y') end) ReviseDate,
  max(case when t.task_name = 'Launch' then date_format(`Date Complete`, '%m/%d/%y') end) LaunchDate
from project p
inner join tasks t
  on p.id = t.`Project ID`
group by p.project

デモで SQL Fiddle を参照してください

結果:

| WEBSITE | BUILDDATE | REVISEDATE | LAUNCHDATE |
-------------------------------------------------
|  Google |  10/30/12 |   11/15/12 |   11/30/12 |
于 2012-11-30T22:21:22.033 に答える
1

自己結合を使用すると、これを簡単に実行できます。

SELECT DISTINCT
   p.project_id,
   p_build.date_complete As 'Build Date',
   p_revise.date_complete As 'Revise Date',
   p_launch.date_complete As 'Launch Date'
FROM Tasks p
LEFT JOIN Tasks p_revise ON p_revise.project_id = p.project_id 
  AND p_revise.task_name = 'Revise'
LEFT JOIN Tasks p_build ON p_build.project_id = p.project_id
  AND p_build.task_name = 'Build'
LEFT JOIN Tasks p_launch ON p_launch.product_id = p.project_id
  AND p_launch.task_name = 'Launch'
于 2012-11-30T22:19:55.950 に答える