问题是这样的,我要对userdz这张表的dzxxchuan字段进行清洗:
清洗的规则为:dzxxchuan字段为空的话,就要对查寻qm,lu,hao,pian,dm字段,qm没有的话,看看lu有没有,lu没有的话,看看hao有
没有,hao没有的话,看看pian有没有,pian有的话,看看dm有没有,dm没有的话的就dzxxchuan的字段为‘不详’,前面只要有一个字段qm,
lu,hao,pian,dm不为空,就取值,且所有的字段要进行拼接的。举个例子,比如用户的dzxxchuan为空的话,查看qm,lu,hao,pian,dm,
比如qm是广州,lu是天河路,hao,pian,dm字段都为空的话。dzxxchuanziduan就拼接成‘广州天河路’了,可能存在有qm,没有lu的,
但有hao的,比如号是88号,那么dzxxchuan就拼接成‘广州88号’啦。dzxxchuan字段为空时,dzxxchuan字段都是拼接出来的。dzxxchuan
为空的,都要都要用查询出 qm,lu,hao,pian,dm字段拼接出来,置dzxxchuan的状态。我感觉好像用一句更新语句好像写不了,看看各位
朋友以前做个类似工作的,提供个方法最好具体操作办法,我的想法是,先把dzxxchuan字段为空的,且qm,lu,hao,pian,dm字段为空的
先置为‘不详’。
update   userdz       set    dzxxchuan='不详'     where(dzxxchuan  is  null  and   qm  is  null  and  lu  is  null   and   hao  is    null    and   pian   is  null   and    dm    is   null);
剩下的思路还不是很明确,请各位朋友帮帮,我刚从事此工作,经验不足!

解决方案 »

  1.   

    update userdz
    set dzxxchuan=COALESCE(qm,lu,hao,pian,dm,'不详')
    WHERE dzxxchuan IS NULL;
      

  2.   

    COALESCE(<value>, <value>, <value>, ...)返回第一个不是NULL的值CREATE TABLE test (
    col1  VARCHAR2(1),
    col2  VARCHAR2(1),
    col3  VARCHAR2(1));INSERT INTO test VALUES (NULL, 'B', 'C');
    INSERT INTO test VALUES ('A', NULL, 'C');
    INSERT INTO test VALUES (NULL, NULL, 'C');
    INSERT INTO test VALUES ('A', 'B', 'C');SELECT COALESCE(col1, col2, col3) FROM test;C
    -
    B
    A
    C
    A
      

  3.   

    梦宵你好,但coalesce函数返回参数列表中的第一个非空值。但我要清洗的是dzxxchuan字段为空,qm不空的话返回值,但qm不为空,lu和hao也可以不为空,会出现qm为广州,lu为天河路,hao为8,返回值则是‘广州天河路8号’了,而update userdz
    set dzxxchuan=COALESCE(qm,lu,hao,pian,dm,'不详')
    WHERE dzxxchuan IS NULL;
    这样只能返回‘广州’啊  
      

  4.   

    比如这种情况
    CREATE TABLE test (
    col1  VARCHAR2(1),
    col2  VARCHAR2(1),
    col3  VARCHAR2(1));INSERT INTO test VALUES (NULL, 'B', 'C');
    INSERT INTO test VALUES ('A', NULL, 'C');
    INSERT INTO test VALUES (NULL, NULL, 'C');
    INSERT INTO test VALUES ('A', 'B', 'C');我需要的结果是
    C
    -
    BC
    AC
    C
    ABC这样的结果,你帮忙看看啊  
      

  5.   

    我要清洗的是dzxxchuan字段为空,qm不空的话返回值,但qm不为空,lu和hao也可以不为空,会出现qm为广州,lu为天河路,hao为8,返回值则是‘广州天河路8号’了,而update userdz
    set dzxxchuan=COALESCE(qm,lu,hao,pian,dm,'不详')
    WHERE dzxxchuan IS NULL;
    这样只能返回‘广州’啊,比如
    CREATE TABLE test (
    col1  VARCHAR2(1),
    col2  VARCHAR2(1),
    col3  VARCHAR2(1));INSERT INTO test VALUES (NULL, 'B', 'C');
    INSERT INTO test VALUES ('A', NULL, 'C');
    INSERT INTO test VALUES (NULL, NULL, 'C');
    INSERT INTO test VALUES ('A', 'B', 'C');我需要的结果是
    C
    -
    BC
    AC
    C
    ABC
    我是要是把在dzxxchuan字段为空的情况下,把lu,hao,pian,dm的所有非空的行拼接更新到dzxxchuan中
      

  6.   

    分两步做:
    第一步:合并qm,lu,hao,pian,dm不为空的字段并赋值给dzxxchuan,如果qm,lu,hao,pian,dm都为空那么dzxxchuan=COALESCE(qm,lu,hao,pian,dm)得到的值仍为空.
    update userdz
    set dzxxchuan=COALESCE(qm,lu,hao,pian,dm)
    WHERE dzxxchuan IS NULL;
    第二步:把执行完第一步后dzxxchuan仍为空的字段赋值为'不详'
    update userdz
    set dzxxchuan='不详'
    WHERE dzxxchuan IS NULL;
      

  7.   

    写错了改一下子:
    分两步做:
    第一步:合并qm,lu,hao,pian,dm不为空的字段并赋值给dzxxchuan,如果qm,lu,hao,pian,dm都为空那么dzxxchuan=COALESCE(qm,lu,hao,pian,dm)得到的值仍为空.
    update userdz
    set dzxxchuan=qm || lu || hao || pian || dm
    WHERE dzxxchuan IS NULL and COALESCE(qm,lu,hao,pian,dm) is not null;
    第二步:把执行完第一步后dzxxchuan仍为空的字段赋值为'不详'
    update userdz
    set dzxxchuan='不详'
    WHERE dzxxchuan IS NULL;