2016-11-30 11 views
0

私はEMPテーブルを持っています。各部門の従業員数を国名= 'インド'、 '米国'、 'オーストラリア'に分けてグループ化する必要があります。例えばパーティションを使用してOracleでカウントを取得

、私はそれを行うにはパーティションBYを使用する必要が

DEPARTMENT | #EMPLOYEE(INDIA) | #EMPLOYEE(USA) | # EMPLOYEE(AUSTRALIA)  
ACCOUNTING | 5    |2    | 3 
IT   | 5    |2    | 1 
BUSINESS  | 1    |4    | 3 

。 PARTITIONを使用して、各部門の従業員の合計数を取得できます。しかし、私は国名でサブグループ化することはできません。

私に教えてください。

ありがとうございます。

+0

これは、現在のテーブルまたは欲しい出力の例ですか?我々は両方が必要です。 [** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t [** START **](http ://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)質問品質を向上させ、より良い回答を得る方法を学ぼう。 –

+0

これが望ましい出力です。ありがとうございました。現在のテーブルには、従業員ID、名前、国、部門、給与があります。 – Roshni

+0

いいえ、 "パーティションバイ"を使う必要はありません。あなたが必要とするのは、あなたの要求に結果を得ることです。あなたはそれをする必要はありません。さらに、この場合、「パーティションバイ」はとにかく役に立たないでしょう。あなたが必要とするのは 'PIVOT'です - あなたがすべての国の数と名前(そして望む順序)を事前に知らなければ、これを"通常の "SQLで行うことはできません。 *動的** SQL。 – mathguy

答えて

0

条件付きカウントを検討してください。

SELECT DEPARTMENT, 
     COUNT(CASE WHEN Country = 'INDIA' THEN 1 END) as emp_india, 
     COUNT(CASE WHEN Country = 'USA' THEN 1 END) as emp_usa, 
     COUNT(CASE WHEN Country = 'AUSTRALIA' THEN 1 END) as emp_australia 
GROUP BY DEPARTMENT 
+0

このアプローチは、国の数、国の名前およびその順序があらかじめ指定されている場合にのみ有効です。それ以外の場合、動的SQLは回避できません。 (最初に正規化されていない出力を避けることを選択しないか、SQLではなくこのタスクのためのレポートツールを使用するのが良い意味がある場合を除きます)。 – mathguy

+0

@mathguy私は同意しますが、また、なぜ国の秩序がここで何をすると言いますか? –

+0

私は知られている国(またはそれに関しては学科)についてはわかりません。おそらく彼らがそうであるか、あるいはOPが代表的なデータセットしか示していなかったかもしれない。 Order:列が表示される順序です。おそらく、それらはアルファベット順や総従業員数のような*いくつかの順序で表示されるべきですし、他のルールやルールのセットで知っている人もいます。ビジネスは彼らの奇妙な要求を持っています... – mathguy

関連する問題