【发布时间】:2018-11-17 11:58:23
【问题描述】:
我想合并两行数据,方法是根据其 ID 保留一行并仅在它为 NULL 值时更新数据。
例如,我想“合并”第 1 行和第 2 行并删除第 2 行:
发件人:
ID date col1 col2 col3
---------------------------------------------------------------
1 31/12/2017 1 NULL 1
2 31/12/2015 3 2 NULL
3 31/12/2014 4 5 NULL
收件人:
ID date col1 col2 col3
---------------------------------------------------------------
1 31/12/2017 1 2 1
3 31/12/2014 4 5 NULL
在示例中,我想保留第 1 行,并用第 2 行中的值填充第 1 行中的 NULL 值。然后我将删除第 2 行。请参见下面我为日期列编写的代码。
UPDATE MyTable
SET
date = newdata.date
FROM
(
SELECT
date
FROM MyTable
WHERE
ID = 2
)
newdata
WHERE
ID = 1 AND MyTable.date IS NULL ;
我想在非常大的表上执行相同的操作,因此我正在寻找一种方法来自动将上述操作(或更好的解决方法?)应用于两个特定行的表的每一列。
需要明确的是,列名 (date) 不应像上面的示例中那样硬编码,因为我有很多不同的表。
表格有很多行,但我只想合并两行(这总是两行)
你能帮我解决这个问题吗?
【问题讨论】:
-
考虑到数据的简单性,为什么不直接查看并运行
UPDATE和DELETE语句呢?UPDATE YourTable SET col2 = 2 WHERE ID = 1; DELETE FROM YourTable WHERE ID = 2;我非常怀疑这是否真的是你需要的,但你给我们的工作很少。您有足够的声誉知道您需要提供您的尝试,并且很少甚至没有解释的极少量样本数据将帮助其他人帮助您。请详细说明您在此处真正需要做什么来更新您的问题,并展示更多场景。 -
@Lamu 抱歉,请参阅我的编辑。
-
那里仍然只有 2 行。我们需要一个大样本量。例如,如果 ID 3 的值
NULL对应于Col3,会发生什么情况?它是否保留NULL,因为那是前一行的值?如果 ID 4 有一个值怎么办?给我们至少 10-15 行来处理并解释预期的结果。 -
另外,
rn,不是m。 :D -
@Larnu 我只尝试合并两行。
标签: sql-server tsql