Каков наилучший способ обновить таблицу с соответствующим столбцом? - PullRequest
0 голосов
/ 06 июля 2018

Я понятия не имею, как решить мою проблему, поэтому я надеюсь, что вы можете помочь мне с этим. Итак, у меня есть одна таблица, например TableA:

Id  Code    ProductId  RelatedId
1   APlus   100        NULL
2   AMinus  100        NULL
3   BPlus   200        NULL
4   BMinus  200        NULL

Теперь у меня есть RelatedId = NULL, и я хочу получить следующие результаты:

Id  Code    ProductId  RelatedId
1   APlus   100        2
2   AMinus  100        1
3   BPlus   200        4
4   BMinus  200        3

Для каждого ProductId и Code строго связаны друг с другом (это противоположно тому же Code Plus - минус).

Должен ли я создать какой-нибудь Курсор? Но что мне взять? Я бы?

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

Вы можете использовать subquery:

select t.*, t2.id as RelatedId
from table t outer apply 
     ( select top 1 t1.id
       from table t1
       where t1.productid = t.productid and
             t1.code <> t.code
     ) t2;
0 голосов
/ 06 июля 2018

попробуйте это

update cte set cte.RelatedId  = cte1.Id from CTE 
inner join CTE cte1 on CTE.ProdecTid = cte1.ProdecTid and CTE.Id != cte1.Id

здесь CTE - ваш стол Имя

0 голосов
/ 06 июля 2018

Вы можете использовать outer apply. Вот один из методов:

select t.*, t2.id
from t outer apply
     (select top 1 t2.*
      from t
      where t2.productid = t.productid and
            t2.code <> t.code
     ) t2;

Это предполагает наличие двух рядов: один минус и один плюс. Вы можете быть более точным:

select t.*, t2.id
from t outer apply
     (select top 1 t2.*
      from t
      where t2.productid = t.productid and
            (t2.code like '%Plus' and t.code like '%Minus') or
             t2.code like '%Minus' and t.code like '%Plus'
            )
     ) t2;

Я должен отметить, что это легко адаптируется к update:

update t
    set relatedid = t2.id
from t outer apply
     (select top 1 t2.*
      from t
      where t2.productid = t.productid and
            t2.code <> t.code
     ) t2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...