2017-11-17 36 views
1

TB_Emloyeeというテーブルからデータを抽出しようとしています。テーブルには、C_ID, Name, Department, Countという4つの列があります。私は希望同じテーブルの内部結合を使用してテーブルからデータを抽出できません

私のテーブルには、次のされたデータ

http://sqlfiddle.com/#!9/e74be

は出力以下の持っています。

C_ID NAme Department Count  
200 Max  IH   2  
100 David PR   1  
101 Lex  PR   1  
102 Alex IT   2  
103 Slava IH   1  
104 Tunja PR   2 

これまで、私は以下のことを試みましたが、データ全体を取得できませんでした。

http://sqlfiddle.com/#!9/e74be/2/0

私はそうな状況で私を助けて、内側のクエリとの専門家ではありませんよ。

ありがとうございました。

答えて

1

自己を行いますが、最高のカウント行に

select a.* 
from Tb_Employee a 
left join Tb_Employee b 
     on a.c_ID = b.c_ID 
     and a.Name = b.Name 
     and a.department = b.department 
     and a.Count < b.Count 
where b.c_ID is null 

Demo

+0

@Mハリドのjunaid、私は、各columよりも12以上の列を持っている場合、「= b.'ColumnName」私はa.'ColunNameをwirteする必要が起こるかは、他の方法があります。あなたのソリューションは今のところ働いています。このリンクをチェックしてくださいhttp://sqlfiddle.com/#!9/56fe88/1 – user1521171

+0

@ user1521171私は、すべての列が繰り返し値を持ちますが、カウント値が異なる場合は、繰り返される列のみを含める必要があります。 on節にある –

+0

@M Khalid junaidあなたのソリューションはサンプルデータベースで作業しているようですが、現在のデータベースでは動作していないようです。私は、このリンク上に独自のデータベースを追加しました。 LFD_NrとHistorieは2つの主キーです。 http://sqlfiddle.com/#!9/c2940e/2 – user1521171

0

を選ぶために参加するだけで、このようNamedepartmentフィールドを追加します。

SELECT 
    C_ID, Name, department, 
    max(Count) AS max_count 
FROM 
    Tb_Employee 
GROUP BY 
    C_ID, Name, department; 

Namedepartmentが同じ値を持っていることを提供同じのためにC_ID

データベーススキーマを設計する場合は、テーブルをより良くnormalizeする必要があります。

0

私は@ Kriz Poonに同意しますが、テーブルを正規化する必要があります。あなたが望む出力を得るには、GROUPの列を追加する必要はありません。実際に選択したい列を変更するだけです。

SELECT 
    `c_ID`, `Name`, `department`, max(`Count`) AS `Count` 
FROM 
    Tb_Employee 
GROUP BY 
    C_ID 
; 
+0

このqeryは動作しているようですが、私は自分のデータベースを台無しにしてしまいました。もう1つの列を追加することを忘れてしまいます。このタイプのスキーマはクエリが機能していません。 http://sqlfiddle.com/#!9/56fe88/1 – user1521171

+0

@ user1521171クエリはうまく動作します。http://sqlfiddle.com/#!9/56fe88/2 –

+0

あなたのソリューションも機能していますが、何とか機能していませんアクセス。 – user1521171

関連する問題