SQL - 根据条件填充列值

Posted

技术标签:

【中文标题】SQL - 根据条件填充列值【英文标题】:SQL - Fill column value base on condition 【发布时间】:2020-04-04 04:53:05 【问题描述】:

我有一个这样的 sql 表

我想用 Alpha 更新 Message 列,如果它的 ID 为 1058,Bravo 为 2045,Charlie 为 3899。

当我们导入平面文件时,ID 和 Message 会一直不同。它并不总是 1058 2045 3899 和 alpha charlie bravo。

谢谢!

【问题讨论】:

所以您将收到 x 行数,并且您想输入 x1 = alpha、x2 = bravo、x3 = charlie、x4 = delta 等?你能告诉我们你以前尝试过什么吗?另外,你能用实际的表格数据替换图像吗?这样我们可以更快地提供帮助。 @deilgemini 。 . .您的表格已经包含该信息,因此似乎不需要 update 【参考方案1】:

您可以尝试以下更新:

UPDATE yourTable t1
SET Message = (SELECT t2.Message FROM yourTable t2
               WHERE t2.ID = t1.ID AND t2.Message IS NOT NULL)
WHERE
    Message IS NULL;

此更新将针对具有NULL(缺失)消息的所有记录,并将用具有相同ID 的记录中的非NULL 值替换该消息。请注意,我们也可以使用更新连接来编写此逻辑,但确切的语法将取决于您未提及的特定数据库。

对于 SQL Server,这是使用更新连接逻辑执行此操作的一种方法:

WITH cte AS (
    SELECT t1.Message AS msgTarget, t2.Message AS msgSource
    FROM yourTable t1
    INNER JOIN yourTable t2 ON t2.ID = t1.ID
    WHERE t1.Message IS NULL AND t2.Message IS NOT NULL
)

UPDATE cte
SET msgTarget = msgSource;

【讨论】:

@devil 我的第一个答案应该适用于几乎任何数据库。我已经包含了一个专门用于 SQL Server 的版本。【参考方案2】:

您至少需要一个条件来更新数据库中的数据。 如果不需要旧数据,您可以全部删除并插入新记录。

如果这不能解决您的问题,可能需要进行一些数据库结构级别的更改。

【讨论】:

【参考方案3】:

您需要使用连接进行条件更新。取决于引擎,但示例如下所示


UPDATE  A
Set A.Message=B.Message
From Table A
INNER JOIN  
(Select distinct id, message from table) B
ON A.id=B.id
Where A.Message is null

【讨论】:

你怎么知道 OP 使用的是哪个 RDBMS?

以上是关于SQL - 根据条件填充列值的主要内容,如果未能解决你的问题,请参考以下文章

SQL:如何根据条件用前一行值填充空单元格?

SQL - 在填充另一列时继承派生列值

从上面的值填充列值,直到它在SQL Server中达到新值

根据行值填充列 BigQuery 标准 SQL

Excel根据分数,填充相应的五角星,俗称五角星打分;

基于列的Excel flash自动填充行