匹配SQL中相似的不同列

时间:2018-07-09 03:02:16

标签: sql sql-server pattern-matching

我有两个桌子。 表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

2 个答案:

答案 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
}