2017-11-02 1 views
1

ITMBPS 세부 정보 값이 아래로 복사 될 때 두 부분의 BOMSEQ_0, CPNITMREF_0, YREF_0 및 TEXTE_0에 대한 값을 null로 만들려고합니다.SQL - 중복 된 특정 값을 null로 바꾸는 방법

SELECT B.BOMSEQ_0, case when B1.ITMREF_0 IS NOT NULL then NULL else B.CPNITMREF_0 end as CPNITREF, case when B1.ITMREF_0 IS NOT NULL then NULL else B.YREF_0 end as YREF, case when B1.ITMREF_0 IS NOT NULL Then NULL else CONVERT(varchar(255), T.TEXTE_0) end as TEXTE, case when B1.CPNITMREF_0 IS NOT NULL then NULL else I.YSTOFCY_0 end as YSTOFCY, case when B1.CPNITMREF_0 IS NOT NULL then NULL else I.PIO_0 end as PIO, case when B1.CPNITMREF_0 IS NOT NULL then NULL else I.BPSNUM_0 end as BPSNUM, case when B1.CPNITMREF_0 IS NOT NULL then NULL else I.ITMREFBPS_0 end as ITMREFBPS, 
      B1.BOMSEQ_0, B1.CPNITMREF_0, B1.YREF_0, CONVERT(varchar(255), T.TEXTE_0) as TEXTE2, I.YSTOFCY_0, I.PIO_0, BPSNUM_0, I.ITMREFBPS_0 
    FROM [BOMD] B 
    INNER JOIN [BOMD] B1 
    ON B.CPNITMREF_0=B1.ITMREF_0 
    AND B.BOMALT_0=B1.BOMALT_0 
    LEFT JOIN [TEXCLOB] T 
    ON B1.BOMTEXNUM_0=T.CODE_0 
    INNER JOIN [ITMBPS] I 
    ON B1.CPNITMREF_0=I.ITMREF_0 
    WHERE B.ITMREF_0='50' 
     and B.BOMALT_0= 1 
    UNION ALL 
    SELECT B.BOMSEQ_0, B.CPNITMREF_0, B.YREF_0, CONVERT(varchar(255), T.TEXTE_0), I.YSTOFCY_0, I.PIO_0, I.BPSNUM_0, I.ITMREFBPS_0, 
      NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL 
    FROM [BOMD] B 
    LEFT JOIN [TEXCLOB] T 
    ON B.BOMTEXNUM_0=T.CODE_0 
    INNER JOIN [ITMBPS] I 
    ON B.CPNITMREF_0=I.ITMREF_0 
    WHERE B.ITMREF_0='50' 
     and B.BOMALT_0= 1 
    ORDER BY B.BOMSEQ_0, B1.BOMSEQ_0, YSTOFCY, YSTOFCY_0, PIO, PIO_0 

지연을 사용해 보았지만 제대로 작동하지 않는 것 같습니다. 편집 : 예제 데이터 및 결과 (약간 짧아도 맞지만 잘하면 당신은 아이디어를 얻을 수 있습니다).

BOMD 
    ITMREF_0 CPNITMREF_0 BOMSEQ_0 BOMALT_0 YREF_0 BOMTEXNUM 
     50  120-001  1  1  F1 1 
     50  112-001  2  1  F2 
     50  110-001  3  1  F3 
     112-001 113-001  1  1  P2 
     112-001 113-002  2  1  P3 2 
     50  120-001  1  2  D1 
     50  112-001  2  2  D2 
     50  110-001  3  2  D3 
     112-001 113-001  1  2  Q2 
     112-001 113-004  2  2  Q3 



TEXTCLOB 
     CODE_0 TEXTE_0 
     1  F1-10 
     2  P3-10 

ITMBPS 
     ITMREF_0 YSTOFCY_0 BPSNUM_0 PIO_0 
     120-001 UK  UK001 0 
     120-001 GER  GER001 2 
     112-001 UK  UK002 0 
     112-001 GER  GER002 2 
     110-001 GER  GER002 0 
     113-001 GER  GER002 0 
     113-001 UK  UK001 2 
     113-002 UK  UK003 0 

원하는 결과

BOMSEQ CPNITMREF YREF BOMTEXNUM BPSNUM BOMSEQ CPNITMREF YREF BTEX BPSNUM 
1  120-001 F1 F1-10  UK001 NULL NULL  NULL NULL NULL 
NULL NULL  NULL NULL  GER001 NULL NULL  NULL NULL NULL  
2  112-001 F2 NULL  UK002 NULL NULL  NULL NULL NULL 
NULL NULL  NULL NULL  GER002 NULL NULL  NULL NULL NULL 
NULL NULL  NULL NULL  NULL 1  113-001 P2  NULL GER002 
NULL NULL  NULL NULL  NULL NULL NULL  NULL NULL UK001 
NULL NULL  NULL NULL  NULL 2  113-002 P3  P3-10 UK003  
3  110-001 F3 NULL  GER002 NULL NULL  NULL NULL NULL 

어떤 아이디어가? 감사합니다.

+2

아마도 예제 데이터와 예상되는 결과를 제공 할 수 있습니다. 또한 문제를 적절히 표시하는 데 필요한 최소한의 코드로 변경하는 것이 유용 할 수 있습니다. https://stackoverflow.com/help/how-to-ask –

+0

특히 내 마음을 읽는 사람이 수리점에있을 때 어떤 데이터의 이점이 없이는 의미가 무엇인지 알 수 없다는 말 그대로 불가능합니다. –

+0

죄송합니다. 작동해야하는 몇 가지 예제 데이터를 추가했습니다. 원하는 결과를 약간만 제한해야했습니다. 여전히 혼란 스럽다면 코드를 제한 할 것입니다. 도와 줘서 고마워. – Sab

답변

1

난이도 버전과 비교하기 위해 사례를 사용하여이 문제를 해결했습니다. 예 :

case when B.CPNITMREF_0=LAG(B.CPNITMREF_0,1,NULL) over (order by B.BOMSEQ_0, YSTOFCY_0, PIO_0, I.BPSNUM_0) then NULL else B.CPNITMREF_0 end as CPNITMREF 
관련 문제