2017-02-08 9 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 

У меня дубликаты в A, B, C (который, как ожидается) Я пытаюсь сделать условие сохранить значение в А и установлен обнуляет значения, которые повторяются в В или СКак установить нулевые значения столбца B и столбца C, если они уже существуют в столбце A sql?

IF A = ​​B или C, то A и держать SET B или C, чтобы NULLS

enter image description here

Спасибо, ребята,: 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

Если вам нужно сделать это, возможно, это поможет случай.

Select Billname AS A, 
CASE WHEN ConsigneeName = Billname THEN NULL ELSE ConsigneeName END, 
CASE WHEN ShipperName = Billname THEN NULL ELSE ShipperName 
from Sum_Orders etc ... 

Если стол большой, это может быть дорогостоящим по запросу и толчок этой логике в самом запросе может быть лучше.

0

Если, б и имеет такое же значение, б и следует установить нуль, так:

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 

 Смежные вопросы

  • Нет связанных вопросов^_^