2017-03-23 6 views
0

これは簡単なことですが、かなり新しくSQLです。 値が列で変更されているかどうかによって、「Y」または「N」を返すことを望みます。下の表から、DaveがEE_Statusに変更を加え、BradがEE_statusに変更を加えていないため、DaveのYとBradのNを返したいとします。テーブル内のフィールドは変更される場合もあれば変更されない場合もありますが、EE_Statusが変更されたかどうかを知りたい唯一のものが1つあり、EEごとに1行戻したいとします。フィールドの値のyesまたはnoが変更されました

だから、私は結果がこの

EE_ID  EE_Name  Had Status Change 
    1  Dave   Y 
    2  Brad   N 

ように私が書いたSQLを見たいと思う、両方のEEのためのYを返します。

Select Distinct EE_ID, EE_Name, 
CASE WHEN EXISTS(SELECT * FROM EE_JOB J2 WHERE J.EE_STATUS <> J2.EE_STATUS) Then 'Y' ELSE 'N' END AS "Had Status Change" FROM JOB J 

表名:EE_JOB

EE_ID EE_Name EE_DEPT EE_Status Date 
1  Dave  Sales  T   02/01/2017 
1  Dave  Sales  A   01/01/2017 
2  Brad  Market  A   12/152016 
2  Brad  Dev  A   05/05/2016 
あなたの助けを

感謝!!

クレイグ

+0

DBMSにご連絡ください。 – JohnHC

答えて

3

ゴードンの答えのバリエーションはEE_STATUSの明確な数は、状態変化が少なくとも一度開催された暗示、1よりも大きいかどうかを確認することです。

SELECT EE_ID, EE_NAME, 
     CASE WHEN COUNT(DISTINCT EE_Status) > 1 
      THEN 'Y' ELSE 'N' END AS HadStatusChange 
FROM EE_JOB 
GROUP BY EE_ID, EE_NAME 
+0

ありがとうございます。それはうまくいった。 –

0

最小値と最大値をチェックするのはどうでしょうか?

select ee_id, ee_name, 
     (case when min(status) = max(status) then 'N' else 'Y' 
     end) as HadStatusChange 
from t 
group by ee_id, ee_name 
関連する問題