2017-02-08 10 views
0
Select BillName as A, ConsigneeName as B, ShipperName as C 
           from Sum_Orders 
           where (OrderStatus in ('Complete','Invoiced') 
    ) 
    and 
    OrderPeriodYear IN (
    (
    YEAR(GETDATE())-1 
    ) 
    ) 
    Group by billname,ConsigneeName,ShipperName 

I는 A, B, C (예상되는) 나는 B 또는 C에 반복 값을 널링하는 A의 값을 유지 에 조건을 만들려고 노력하고 설정하고있어에서 중복 데열 A와 SQL에 이미 존재하는 경우 열 B와 열 C의 값을 null로 설정하는 방법?

A = B 또는 C는 다음을 유지하고 SET의 B 또는 C가

enter image description here

를 널 (null)하는 경우는, 사람을 주셔서 감사합니다 : D

답변

0

이것이 원하는 것입니까?

update t 
    set B = (case when B <> A then B end), 
     C = (case when C <> A then C end) 
    where B <> A or C <> A; 
0

이 작업을 수행해야하는 경우 아마도 도움이 될 것입니다.

테이블이 큰 경우 쿼리에 비용이 많이 들고이 논리를 쿼리 자체로 밀어 넣는 것이 더 나을 수 있습니다.

0

만약, b와 c가 같은 값, b와 c가 그래서 널 (null)로 설정해야 있습니다

Update tablename 
Set B = if(A=B, null, B) , C=if(A=C, null, C) 
-- where A=B or A=C 

당신이 사용할 수있는 최적화 재미있는 '곳'인 경우를!

당신이 '선택'을 할 거라면 값 :

Select A, if(A=B, null, B) as B , if(A=C, null, C) as C from tablename