我不知道如何解决我的问题,所以希望您能帮助我。因此,我有一个表,例如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 Plus-减号相反)。
我应该创建一些游标吗?但是我该怎么办? ID?
答案 0 :(得分:2)
您可以使用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;
答案 1 :(得分:0)
您可以使用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;
答案 2 :(得分:0)
尝试这个
update cte set cte.RelatedId = cte1.Id from CTE
inner join CTE cte1 on CTE.ProdecTid = cte1.ProdecTid and CTE.Id != cte1.Id
此处CTE是您的表格名称