【问题标题】:Updating empty cells with filled cells values in duplicate records without unique key在没有唯一键的重复记录中使用填充单元格值更新空单元格
【发布时间】:2019-11-25 19:30:06
【问题描述】:

我有一个表tblPhone,其中包含重复记录。例如

Group    First_Name    Middle_Name    Last_Name    Class    ...    Note    ...Other_Columns
-----    ----------    -----------    ---------    -----    ...    ----    ...-------------
Avo      FirstName     MiddleName     LastName     246      ...    NULL    ...Other_Columns
Avo      FirstName     MiddleName     LastName     215      ...    Valu    ...Other_Columns

正如您在上面看到的示例表有两个没有唯一标识 KEY 的重复记录。

1) 问题1:如何唯一标识表中的每条重复记录?

2) 查看Note 列,第一行有NULL 值,第二行有Valu 一些值。问题 2:如何将填充单元格 Valu 的值更新为空/NULL 单元格?

2) 问题 3 是:如何获取和更新Class 列中每个单元格中的最小数值?

我尝试编写的 UPDATE 查询如下,但在 CASE ELSE 子句中混淆:

UPDATE tblPhone
   SET [Note] = CASE WHEN [Note] = '' THEN [Note] = ???
WHERE Last_Name = 'LastName'
  AND First_Name = 'FirstName';

我还在SQL Fiddle 中创建了示例表架构。

数据库是在 SQL Server 2017 中创建的。

您的任何帮助将不胜感激!

【问题讨论】:

  • Group、First_Name、Last_Name、Class 和 Suffix 是否可以为空?我在 SQL Fiddle 上没有看到,但值得一问;我认为复合键在这里可能会有所帮助,并且可以回答您的所有三个问题。我想。
  • 我假设他们是;也许使它们不可为空,并从那里构建复合键?
  • 不,这两个不能为空,但是我如何在相同的记录上应用复合键??
  • 我根据您的 SQL Fiddle 建议了 4 列,而不是 2 列。 FIrst/Last Name 虽然不能为空,但还不够。我还建议了类和后缀。但是,与 SQL Fiddle 相比,我对您在帖子中列出的数据有点困惑。类和后缀不是唯一的吗?类在帖子中看起来是独一无二的,而不是在 SQL Fiddle 中。

标签: sql sql-server sql-update


【解决方案1】:

您可以使用子查询:

UPDATE p1
    SET p1.[Note] = (
        SELECT TOP(1) [Note]
        FROM tblPhone p2 
        WHERE p2.[Note] IS NOT NULL 
            AND p2.First_Name = p1.First_Name
            AND p2.Last_Name = p1.Last_Name
        )
FROM tblPhone p1
WHERE p1.[Note] IS NULL;

【讨论】:

  • 我有 tested 你的解决方案,但 Note 值没有更新...
  • 如果第一个/最后一个用户没有注释,它将不起作用,否则它应该
  • 感谢您的帮助!我想通了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多