2016-09-08 8 views
1

私はテーブルから選択を取得し、列の値に基づいて行を返そうとしています。以下はデータと望ましい出力です。 EmpRecord列に返されるヌル以外の複数の値がある場合、ヌルのみを持つ場合は返されます。SQLの出力を下に取得する方法

Data Table 

EmployeeNo     EmpRecord 
1       A 
1       NULL 
2       a 
3       NULL 
4       NULL 
4       A 
4       aa 




Output 
EmployeeNo     EmpRecord 
1       A 
2       a 
3       NULL 
4       A 
4       aa 

これを進める方法についてのアドバイスはありますか?

よろしく、

シド
+0

「EXISTS」との相関サブクエリを使用することができます。 –

答えて

1

以下UNIONクエリの最初の半分は単にEmpRecordNULLこといるレコードを取り除き。このがほぼの場合は、のみが、もう1つがNULLレコードの従業員の場合を除き、ジョブが完了します。これにより結果セットからも削除されます。したがって、UNIONの2番目の部分は、これらの従業員を従業員番号とレコードのためのNULLプレースホルダを持つ1つのレコードとして戻します。

SELECT t1.EmployeeNo, 
     t1.EmpRecord 
FROM yourTable t1 
WHERE t1.EmpRecord IS NOT NULL 
UNION ALL 
SELECT t2.EmployeeNo, 
     NULL AS EmpRecord 
FROM yourTable t2. 
GROUP BY t2.EmployeeNo 
HAVING SUM(CASE WHEN t2.EmpRecord IS NULL THEN 1 ELSE 0 END) = COUNT(*) 
+0

ありがとうございます。 – Sid

+0

@Sidクエリをもう一度お試しください。 –

関連する問題