我有两个桌子。 表A如下:
ID | Val1 | Val2 | Val 3
1 55.198 200 67.501
1 68.647 205 149.011
1 150.545 210 250.124
和表B如下:
ID_From_TableA | Val1 | Val2
1 55.199 200
1 56.156 200
1 68.647 205
如果我们组合
,则表A具有唯一的值ID和Val2
和
我想在 TableA.ID = Table2.ID_From_TableA 和 TableA时用TableA的 Val2 更新tableB的列 Val2 .Val1大约等于TableB.Val1
我尝试了下面给出的代码,但是没有用
select B.ID, B.Val1
B.Val2 = A.VAL1
from TableA A
left join TableB B
on A.ID_From_TableA = B.ID
where (B.VAL1-A.Val1)>1
我也尝试过,但是没用
select B.ID, B.Val1
B.Val2 = A.VAL1
from TableA A
left join TableB B
on A.ID_From_TableA = B.ID
where B.VAL1 like A.Val1
有人可以帮忙吗?
PS-我正在使用MSSQL
答案 0 :(得分:2)
使用更新联接,并确保extends
出现在该联接的左侧:
TableB
这假设UPDATE b
SET b.Val2 = a.Val2
FROM tableB b
INNER JOIN tableA a
ON b.ID = a.ID AND ABS(b.Val1 - a.Val1) < 0.01;
值之间的差异小于0.01,表示相等。您可以根据需要调整此公差。
答案 1 :(得分:0)
感谢蒂姆,
我尝试了下面的代码,它的工作就像一个魅力。
// get your ETC as an Integer
var ETC = (int)parameter.Get("etc");
var entityLogicalName = "";
// Query setup
// Columns: "LogicalName"
// Criteria: "ObjectTypeCode eq ETC"
var metaQuery = new EntityQueryExpression
{
Properties = new MetadataPropertiesExpression
{
AllProperties = false,
PropertyNames = { "LogicalName" }
},
Criteria = new MetadataFilterExpression
{
FilterOperator = LogicalOperator.And,
Conditions = { new MetadataConditionExpression("ObjectTypeCode", MetadataConditionOperator.Equals, ETC) }
}
};
var response = (RetrieveMetadataChangesResponse)XrmService.Execute(new RetrieveMetadataChangesRequest{ Query = metaQuery });
if (response.EntityMetadata.Count == 1)
{
entityLogicalName = response.EntityMetadata.First().LogicalName;
}
else
{
// 0 or multiple results. Handle appropriately
}