如果为null,则填充相邻列行

时间:2014-06-30 21:41:15

标签: sql sql-server database tsql

我有一个查询问题。我正在处理一组类似于下表的数据:

╔══════╦═══════════╗
║ Col1 ║   Col2    ║
╠══════╬═══════════╣
║    1 ║ NULL      ║
║    2 ║ NULL      ║
║    3 ║ NULL      ║
║    4 ║ AAAAAAAAA ║
║    5 ║ NULL      ║
╚══════╩═══════════╝

我需要找到一种方法,使用非NULL NULL值填充Col2中的所有Col2值。因此,只要存在至少1个非NULL值,查询结果应使用AAAAAAAAA填充所有5行。

编辑:它不必是AAAAAAAAA来填充剩余的行。它可以是任何东西,只要有一些方法可以确定集合中至少有1个非空值。

5 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要:

  1. 从您的表中获取col2中的非空值,
  2. col2中的所有空值设置为上一步中隐藏的值
  3. 如果是这种情况,那么我认为这可能会对您有所帮助:

    -- 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