2016-06-19 8 views
0

私は次のようなテーブル構造を持つ:クエリのフェッチのためのデータが

Department table

私はDEPT_IDを使用して1部門の合計の従業員を表示するクエリを記述しようとしていますこのように:

Output table for dept_id 1

カテゴリ名は使用してフェッチ取得している別のテーブルから参加する: Cアトリエテーブルには以下のフィールドがあります:

id | Cat_Name

私は以下の

でグループを使用して同じことをやろうとしていますが、MySQLのクエリの私の試みです。(現在、私は使用していない私は私が後で結合を使用してカテゴリ名を取得することができます知っているとして参加します)。

上記の形式でデータを取得する方法に関心があります。

  1. SELECT * FROM dept_data年BY dept_data WHERE DEPT_ID = 1グループから年BY = 1 GROUP DEPT_ID
  2. SELECT *は、この上で私を助けることができる

誰もがCATEGORY_ID WHERE?同様Shaharyarはコメントに書い

おかげ

+1

それは 'ピボット'と呼ばれ、残念なことに 'mysql'はこの機能を提供しません。 ** mysqlピボット**を検索し、それを達成するためのいくつかの回避策を用意することができます。 – Shaharyar

答えて

1

は、それが "ピボット" と呼ばれています。

あなたはここで、条件付きの集約が必要になります。

SELECT year AS Year, 
    MAX(CASE WHEN category_id = 1 THEN total_employees END) AS `Category 1 (Name)`, 
    MAX(CASE WHEN category_id = 2 THEN total_employees END) AS `Category 2 (Name)` 
FROM dept_data 
WHERE dept_id = 1 
GROUP BY year 
+0

こんにちはPaul、レスポンスありがとうございます。しかし、エラー#1064として返ってきたので、私はあなたのクエリを使用できませんでした。 –

+0

私はあなたの質問とは別の組み合わせを試しました: –

+0

私はあなたの質問の修正版を思い付いて、それが動作します。私は答えとして以下に掲示しています。 –

0

最後に、私は私が必要なものないクエリを思い付きました。

Paul Spiegelに感謝します。

実際には、ポールシュピーゲルの答えの修正版です。

SELECT year AS Year, 
MAX(IF(category_id = 1, total_employees, NULL)) AS Category1, 
MAX(IF(category_id = 2, total_employees, NULL)) AS Category2 
FROM dept_data WHERE dept_id = 1 GROUP BY year 

他人にも役立つことを願っています。

関連する問題