2016-11-04 19 views
0

私はここに3つのテーブル:DinasHoHeader,DinasHoDetailおよびEmployeeを持っています。Select Query Join選択トップ1

まず私は、このクエリ

select a.KodeDinasHeader,c.Nip,DepartmentCode 
from DinasHoHeader a 
left join DinasHoDetail b on a.KodeDinasHeader = b.KodeDinasHeader 
left join employee c on b.Nip = c.Nip 
where DepartmentCode = 'IT' 

を持っていて、私はKodeDinasHeaderを複製得る見ることができるように私は

KodeDinasHeader Nip  DepartmentCode 
DN0000007  1501971   IT 
DN0000007  1411517   IT 

この結果を得ます。私はそれが異なることを知っていますNip。私はちょうどKodeDinasHeaderDepartmentCodeを表示したいので。クエリをこれに変更しようとしています

SELECT a.KodeDinasHeader,DepartmentCode From DinasHoHeader a 
left join (
select TOP 1 * from DinasHoDetail 
) b on a.KodeDinasHeader = b.KodeDinasHeader 
left join employee c on b.Nip = c.Nip 
where c.DepartmentCode = 'IT' 

私は空の結果になります。どうすればこれを達成できますか?

KodeDinasHeader  DepartmentCode 
    DN0000007   IT 
+0

?どんな結果がほしいですか –

答えて

4

これを試してみてください。

select DISTINCT a.KodeDinasHeader,DepartmentCode 
from DinasHoHeader a 
left join DinasHoDetail b on a.KodeDinasHeader = b.KodeDinasHeader 
left join employee c on b.Nip = c.Nip 
where DepartmentCode = 'IT' 

注、私はDISTINCT追加され、選択リストからニップ列を削除しました。

+0

私は別れを忘れてしまいます。ありがとう。 – YVS1102

+0

問題はありませんが、答えを受け入れることができますか?ありがとう。 :) – andrews

0

このようにクエリを書き換えます。 TOP 1を追加したので、列を削除する必要はありません。あなたが必要といけない場合、あなたは、なぜ、テーブルの従業員が参加し、ニップ必要がないときには「ニップ」欄には、あなたはこの

select TOP 1 a.KodeDinasHeader,c.Nip,DepartmentCode 
from DinasHoHeader a 
left join DinasHoDetail b on a.KodeDinasHeader = b.KodeDinasHeader 
left join employee c on b.Nip = c.Nip 
where DepartmentCode = 'IT 
+0

OPにはDistinct Rowsが必要です。トップ1ではない.. –

+0

あなたは正しいです –

1

を削除することができますか? NothnigはDeptコードがどのテーブルに属しているかを示します。あなたはこれをどうするかをしたいですかこのことについて何、

declare @DeptCode varchar(50)='IT' 
select a.KodeDinasHeader,@DeptCode DepartmentCode 
from DinasHoHeader a 
left join DinasHoDetail b on a.KodeDinasHeader = b.KodeDinasHeader -- or inner join 
where DepartmentCode = @DeptCode