2017-11-21 3 views
0
(答えを)

テーブルカウント従業員が100%を取った場合(同じテーブルで)更新する方法二つの列

EMP_ID BENEFIT_Per Yes/No 
    A  20  
    A  40  
    A  100  
    B  30  
    B  30  
    C  100  
    C  10  
    C  20  
    D  30  
    D  40  
    D  50  

TABLE-A

EMP_ID BENEFIT_Per Yes/No 
    A  20   yes 
    A  40   yes 
    A  100   yes 
    B  30   no 
    B  30   no 
    C  100   yes 
    C  10   yes 
    C  20   yes 
    D  30   no 
    D  40   no 
    D  50   no 

を照合することによって特定の図形を有する場合利益、はい、いいえ?ここで

+0

MySQLまたはSQL Server? – Sami

+0

これまでに何を試しましたか? –

+0

私はSQL Server –

答えて

0

あなたは

DECLARE @tab TABLE (EMP_ID CHAR(1), BENEFIT_Per INT, [Yes/No] NVARCHAR(3) NULL) 
INSERT INTO @tab 
(EMP_ID, BENEFIT_Per) 
SELECT 'A', 20 UNION ALL 
SELECT 'A', 40 UNION ALL 
SELECT 'A',100 UNION ALL 
SELECT 'B', 30 UNION ALL 
SELECT 'B', 30 UNION ALL 
SELECT 'C',100 UNION ALL 
SELECT 'C', 10 UNION ALL 
SELECT 'C', 20 UNION ALL 
SELECT 'D', 30 UNION ALL 
SELECT 'D', 40 UNION ALL 
SELECT 'D', 50 

;WITH cteZ 
AS(
    SELECT T.EMP_ID 
     , MAX(T.BENEFIT_Per) 'MxBen' 
    FROM @tab T 
    GROUP BY T.EMP_ID 
) 
UPDATE T 
SET T.[Yes/No] = CASE WHEN Z.MxBen = 100 THEN 'Yes' ELSE 'No' END 
FROM @tab T 
LEFT JOIN cteZ Z ON Z.EMP_ID = T.EMP_ID 


Output 

enter image description here

0

元のテーブルt1を呼び出して行きます。

select EMP_ID, max(BENEFIT_Per) bene_max from t1 group by EMP_ID 

そしてbenefit_perから最大値を検索し、この1

select t1.EMP_ID, t1.BENEFIT_Per, t2.bene_max = 100 from t1 
left join (select EMP_ID, max(BENEFIT_Per) bene_max from t1 group by EMP_ID) t2 
on t1.EMP_ID = t2.EMP_ID 
+0

これは正しいですが、opは更新ステートメント – Simon

+0

をtrueにします。あなたにupvoteを与えました – wkzhu

1

と元のテーブルを結合し、それが100であれば、イエスに等しいすべての列を更新する:あなたは、最初にこのサブテーブルが欲しいです派生クエリがEMP_IDどこにとにtableAのEMP_IDの試合:

update tableA 
set yes_no = case when max_benefit = 100 then 'yes' else 'no' end 
from (select emp_id, max(benefit_per) as max_benefit from tableA group by emp_id) t1 
where t1.emp_id = tableA.emp_id 

rextesterサンプル

0
UPDATE A 
SET  A.[Yes/No] = CASE WHEN EXISTS(
             SELECT TOP 1 1 
             FROM [Table] 
             WHERE EMP_ID = A.EMP_ID AND BENEFIT_Per = 100 
            ) THEN 'Yes' ELSE 'NO' END 
FROM [Table] A 
WHERE 1=1 
関連する問題