如果另一列中的单元格部分相似,则SQL为单元格提供相同的值

问题描述 投票:2回答:3

我对SQL很新。我正在尝试以下方法。我有以下table1与列组和描述。

表1示例

我想检查单元格值是否部分相同。就像在这种情况下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%'

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

sql sql-server tsql
3个回答
3
投票

试试这个查询:

WITH cte AS (
    SELECT t1.Description AS desc_dest, t2.Description AS desc_src
    FROM yourTable t1
    INNER JOIN yourTable t2
        ON t2.[Group] LIKE t1.[Group] + '[A-Z]%' AND LEN(t1.[Group]) <= 9
)

UPDATE cte
SET desc_dest = desc_src;

Demo


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的值以匹配a中的值。

这意味着Group101D1的描述将设置为Group101,Group101XX也是如此。它还应该允许处理Group1010404D1来改变Group1010404

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

编辑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'
© www.soinside.com 2019 - 2024. All rights reserved.