SQL 数据输入 - 查找输入信息的顺序

问题描述 投票:0回答:1

我一直在开发一个需要新代码的 DBO。

我必须在具有数千行的列中手动添加特定代码以满足我的要求。

问题是,有些已经填充,我需要将它们添加到下一个可用的空列中。

目前采用以下格式:

current data

我需要将代码 Z987 添加到每个 ID 的第一个 NULL

sql sql-server sql-server-2008
1个回答
0
投票

首先,无论是谁设计了这些数据,都需要阅读数据库规范化,因为这种设计违反了最基本的原则。最好的解决方案是重新设计数据以遵循良好的设计实践。

但是,如果这不是一个选项,您将需要编写一个

UPDATE
语句来更新每个列,但有条件地选择当前值或新值作为要分配的值。条件将基于已设置的列。为了避免逻辑重复,您可以使用
CROSS APPLY
来标识要更新哪一列。然后可以将其用于在
CASE
逻辑中提供
SET
表达式。

结果会是这样的:

UPDATE T
SET
    ColumnA = CASE WHEN C.ColumnSelect = 1 THEN 'NewValue' ELSE ColumnA END,    
    ...
    ColumnF = CASE WHEN C.ColumnSelect = 6 THEN 'NewValue' ELSE ColumnF END
FROM YourTable T
CROSS APPLY (
    SELECT CASE
        WHEN ColumnA IS NULL THEN 1
        ...
        WHEN ColumnF IS NULL THEN 6
        ELSE 0
        END AS ColumnSelect
) C
© www.soinside.com 2019 - 2024. All rights reserved.