1

有了这个样本数据...

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

我想将c3值分配给它所在的行NULL并且c2值相同,但不希望实际更新表中的该值,仅在 select 运行时使用它来加入另一个表。

我可以使用内部选择和连接来做到这一点,但我想尽可能多地节省处理能力,因为数据量很大,并且认为一些使用ISNULLCOALESCE应该能够做到,但我没有足够的我自己的经验来弄清楚它,或者甚至说是否可能。你怎么看?

4

2 回答 2

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

演示

于 2013-07-11T14:00:23.813 回答
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 ) 
于 2013-07-11T13:57:21.147 回答