首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -如何用null替换某些重复的值

SQL -如何用null替换某些重复的值
EN

Stack Overflow用户
提问于 2017-11-02 14:31:17
回答 1查看 554关注 0票数 1

当ITMBPS详细信息复制值时,我试图使BOMSEQ_0、CPNITMREF_0、YREF_0和TEXTE_0的值为空。

代码语言:javascript
复制
    SELECT B.BOMSEQ_0, case when B1.ITMREF_0 IS NOT NULL then NULL else B.CPNITMREF_0 end as CPNITREF, case when B1.ITMREF_0 IS NOT NULL then NULL else B.YREF_0 end as YREF, case when B1.ITMREF_0 IS NOT NULL Then NULL else CONVERT(varchar(255), T.TEXTE_0) end as TEXTE, case when B1.CPNITMREF_0 IS NOT NULL then NULL else I.YSTOFCY_0 end as YSTOFCY, case when B1.CPNITMREF_0 IS NOT NULL then NULL else I.PIO_0 end as PIO, case when B1.CPNITMREF_0 IS NOT NULL then NULL else I.BPSNUM_0 end as BPSNUM, case when B1.CPNITMREF_0 IS NOT NULL then NULL else I.ITMREFBPS_0 end as ITMREFBPS,
           B1.BOMSEQ_0, B1.CPNITMREF_0, B1.YREF_0, CONVERT(varchar(255), T.TEXTE_0) as TEXTE2, I.YSTOFCY_0, I.PIO_0, BPSNUM_0, I.ITMREFBPS_0
    FROM [BOMD]  B
    INNER JOIN [BOMD] B1
    ON B.CPNITMREF_0=B1.ITMREF_0 
    AND B.BOMALT_0=B1.BOMALT_0
    LEFT JOIN [TEXCLOB] T
    ON B1.BOMTEXNUM_0=T.CODE_0
    INNER JOIN [ITMBPS] I
    ON B1.CPNITMREF_0=I.ITMREF_0
    WHERE B.ITMREF_0='50'
      and B.BOMALT_0= 1
    UNION ALL
    SELECT B.BOMSEQ_0, B.CPNITMREF_0, B.YREF_0, CONVERT(varchar(255), T.TEXTE_0), I.YSTOFCY_0, I.PIO_0, I.BPSNUM_0, I.ITMREFBPS_0,
           NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
    FROM [BOMD] B
    LEFT JOIN [TEXCLOB] T
    ON B.BOMTEXNUM_0=T.CODE_0
    INNER JOIN [ITMBPS] I
    ON B.CPNITMREF_0=I.ITMREF_0
    WHERE B.ITMREF_0='50'
      and B.BOMALT_0= 1
    ORDER BY B.BOMSEQ_0, B1.BOMSEQ_0, YSTOFCY, YSTOFCY_0, PIO, PIO_0

我试过用滞后的方法,但我似乎不能让它起作用。编辑:使用示例数据和结果(为配合起见略为缩短,但希望您能理解)。

代码语言:javascript
复制
BOMD
     ITMREF_0  CPNITMREF_0  BOMSEQ_0 BOMALT_0 YREF_0 BOMTEXNUM
        50        120-001      1        1        F1  1
        50        112-001      2        1        F2
        50        110-001      3        1        F3
        112-001   113-001      1        1        P2
        112-001   113-002      2        1        P3  2
        50        120-001      1        2        D1
        50        112-001      2        2        D2
        50        110-001      3        2        D3
        112-001   113-001      1        2        Q2
        112-001   113-004      2        2        Q3



TEXTCLOB
        CODE_0   TEXTE_0
        1        F1-10
        2        P3-10

ITMBPS
        ITMREF_0 YSTOFCY_0 BPSNUM_0 PIO_0
        120-001  UK        UK001    0
        120-001  GER       GER001   2
        112-001  UK        UK002    0
        112-001  GER       GER002   2
        110-001  GER       GER002   0
        113-001  GER       GER002   0
        113-001  UK        UK001    2
        113-002  UK        UK003    0

期望的结果

代码语言:javascript
复制
BOMSEQ CPNITMREF YREF BOMTEXNUM BPSNUM BOMSEQ  CPNITMREF YREF   BTEX  BPSNUM
1      120-001   F1   F1-10     UK001  NULL    NULL      NULL   NULL  NULL
NULL   NULL      NULL NULL      GER001 NULL    NULL      NULL   NULL  NULL       
2      112-001   F2   NULL      UK002  NULL    NULL      NULL   NULL  NULL
NULL   NULL      NULL NULL      GER002 NULL    NULL      NULL   NULL  NULL
NULL   NULL      NULL NULL      NULL   1       113-001   P2     NULL  GER002
NULL   NULL      NULL NULL      NULL   NULL    NULL      NULL   NULL  UK001
NULL   NULL      NULL NULL      NULL   2       113-002   P3     P3-10 UK003      
3      110-001   F3   NULL      GER002 NULL    NULL      NULL   NULL  NULL

有什么想法吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-06 15:14:55

我用一个案例将列与滞后版本进行比较,从而解决了这个问题。例如:

代码语言:javascript
复制
case when B.CPNITMREF_0=LAG(B.CPNITMREF_0,1,NULL) over (order by B.BOMSEQ_0, YSTOFCY_0, PIO_0, I.BPSNUM_0) then NULL else B.CPNITMREF_0 end as CPNITMREF
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47077793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档