如果另一列中的单元格部分相似,SQL会为单元格赋予相同的值

时间:2018-03-02 08:03:26

标签: sql sql-server tsql

我对SQL很陌生。我尝试以下方法。 我有以下table1与列组和描述。

表1示例

Table1 Example

我想检查单元格值是否部分相同。就像在这种情况下Group101和Group101D1。现在我想从D1中获取值的描述并将其放在没有D1的那个的描述列中。 并且对于Group值部分相同的所有单元格执行此操作。

SELECT [Group]
  ,[Description]
FROM [Table1]
update [Table1]
set Description = (Select [Description] from [Table1] where [Group] like '%Group101D1%')
where Address like '%Group1%'

这是我走了多远。我可以让它适用于一个,但必须将其拆分并使其适用于所有这些。

3 个答案:

答案 0 :(得分:3)

尝试此查询:

vCurrDate = new Date();
vDueFromDate = new Date();
vDueToDate = new Date();    
vOverDueToDate = new Date();
vCurrDate.setDate(vCurrDate.getDate() - 1);
vDueFromDate.setDate(vCurrDate.getDate() - 30);
vDueToDate.setDate(vCurrDate.getDate());
vOverDueToDate.setDate(vCurrDate.getDate() - 31);

Demo

答案 1 :(得分:0)

如果您只是希望在最后两个字符中只有不同的所有描述之间保持一致,那么应该遵循以下方法:

WITH CTE AS 
(
    SELECT 
        a.Description
        , b.Description AS Descriptionb
    FROM 
        TABLE1 a  
        JOIN [Table1] b ON LEFT(a.[Group], LEN(a.[Group]) - 2) = b.[Group]
) 
update CTE 
set Description = Descriptionb

自我加入确定我们会查找所有描述,其中设置a(Group101D1)中的最后2个字符被删除,因此我们最终得到Group101。然后我们在集合b中寻找匹配。如果我们找到它,我们设置b的值以匹配。

中的值

这意味着Group101D1的说明将设置为Group101,Group101XX也是如此。它还应允许处理Group1010404D1以更改Group1010404

编辑:切换UPDATE。我读错了,它会更新错误的值。

Edit2:正如蒂姆所说,我的加入是错误的。不过,上述情况应该奏效。

答案 2 :(得分:0)

我的解决方案如下:

SELECT [Table1].[Description] 
, [Table2].[Description] 
,[Table1].[Group] 
,[Table2].[Group]
--update [Table1] set [Table1].[Description] = [Table2].[Description]
FROM [BVCIOList_DOW].[dbo].[Table] Table1
INNER JOIN [BVCIOList_DOW].[dbo].[Table] Table2
ON [Table2].[Group] = [Table1].[Group] + 'D1'