SQL为没有更新的空字段分配连接目的值

时间:2013-07-11 13:51:22

标签: sql teradata

使用此示例数据......

c1  c2  c3
10  a   10a
11  a   **NULL**
12  a   **NULL**
13  b   13b
13  b   **NULL**
etc..

我想将c3值分配给 NULL c2值相同的行,但不希望实际更新该值在表中,只有在选择运行时才使用它来连接到另一个表。

我可以使用内部选择和连接来做到这一点,但我希望尽可能多地保存处理能力,因为数据量很大并且认为使用 ISNULL COALESCE 应该能够做到,但我没有足够的经验来自己解决,甚至说是否可能。你觉得怎么样?

2 个答案:

答案 0 :(得分:1)

 select
    a.c1,
    a.c2,
    coalesce( a.c3, b.c3) as c3
   from table1 a
      left join table1 b
       on a.c2 = b.c2
             an  a.c3 is null
             and b.c3 is not null

这将与您拥有的数据一起使用但是如果对于给定的c2,对于c3存在多个非空行,则会导致问题

如果您的数据库支持max() over,您也可以执行此操作

SELECT c1,
       c2,
       coalesce(c3, MAX(C3) over (partition by c2)) c3
from table1

demo

答案 1 :(得分:0)

我经常在查询中使用的示例 pseudo code

DECLARE @USER_ID AS VARCHAR(256)
SELECT @USER_ID = 'abc'


select *
from CC
INNER JOIN adm_co_users CR_US WITH(NOLOCK) ON ISNULL(CR_US.original_userID,'') =
        (CASE ISNULL(CC.Createdby,'')   WHEN '' THEN @USER_ID
        ELSE CC.Createdby END )