我有一个查询问题。我正在处理一组类似于下表的数据:
╔══════╦═══════════╗
║ Col1 ║ Col2 ║
╠══════╬═══════════╣
║ 1 ║ NULL ║
║ 2 ║ NULL ║
║ 3 ║ NULL ║
║ 4 ║ AAAAAAAAA ║
║ 5 ║ NULL ║
╚══════╩═══════════╝
我需要找到一种方法,使用非NULL NULL
值填充Col2
中的所有Col2
值。因此,只要存在至少1个非NULL值,查询结果应使用AAAAAAAAA
填充所有5行。
编辑:它不必是AAAAAAAAA
来填充剩余的行。它可以是任何东西,只要有一些方法可以确定集合中至少有1个非空值。
答案 0 :(得分:0)
如果我理解正确,您需要:
col2
中的非空值,col2
中的所有空值设置为上一步中隐藏的值如果是这种情况,那么我认为这可能会对您有所帮助:
-- I am assuming that there's only one not-null value in col2
set @value = (select col2 from yourTable where col2 is not null limit 1);
update yourTable
set col2 = @value
where col2 is null;
答案 1 :(得分:0)
以下内容适用于MySQL或SQL Server:
update table t
set col2 = (select x from (select max(col2) as x from table t where col2 is not null) t)
where col2 is null;
答案 2 :(得分:0)
不确定我理解你的需要,但......
UPDATE t SET col2 = (SELECT col2 FROM t where col2 is not null LIMIT 1) WHERE col2 is null
答案 3 :(得分:0)
select table1.col1, COALESCE(table1.col2, 'xyz')
from table as table1
答案 4 :(得分:0)
如果你想要一个案例陈述并且不需要永久改变表格(可能你只想改变它的输出),那就这样做:
SELECT
col1,
col2 = case
WHEN exists(select col2 from table where col2 is not null) then 'dummyVal'
else col2 end
FROM table
如果您需要将虚拟值作为表中的某个实际值,为什么不使用max或min函数,两者都忽略空值。
SELECT
col1,
col2 = max(col2)
FROM table