SQl查询连接并将重复列值设置为null

时间:2016-06-08 04:59:37

标签: sql sql-server

我想在sql查询中加入2表然后在结果中 重复列单元格其中一个重复条目变为空。 我的第一张表是:

id  corp_code   pay_authority_no    authority_price status
1    C286           210995              85020000    True
2    C286           210879              61040000    True
3    C139           212475              77708280    True
4    C139           212465              77878320    True
5    C296           216177              101335000   True
13   C321           214526              56680000    True

和第二个表是:

id  pay_authority_no    order_kind  order_no
2         210879         Reorder    84182
1         210995         Reorder    83251
4         212465         Sup        459950
3         212475         Sup        459948
15        212475         Sup        65878
13        214526         Reorder    86019
14        214526         Reorder    86020
5         216177         Reorder    83715

并且结果是:

corp_code   pay_authority_no    authority_price order_no    order_kind
   C139           212465           77878320      459950      Sup
   C139           212475           77708280      459948      Sup
   C139           212475           77708280      65878       Sup
   C286           210879           61040000      84182       Reorder
   C286           210995           85020000      83251       Reorder
   C296           216177           101335000     83715       Reorder
   C321           214526           56680000      86019       Reorder
   C321           214526           56680000      86020       Reorder

我希望结果如下:

corp_code   pay_authority_no  authority_price   order_no    order_kind
    C139         212465         77878320         459950      Sup
    C139         212475         77708280         459948      Sup
    C139         212475         Null or 0        65878       Sup
    C286         210879         61040000         84182       Reorder
    C286         210995         85020000         83251       Reorder
    C296         216177         101335000        83715       Reorder
    C321         214526         56680000         86019       Reorder
    C321         214526         Null or 0        86020       Reorder

请解决此问题!

3 个答案:

答案 0 :(得分:4)

试试这个:

SELECT t1.corp_code, t1.pay_authority_no, 
       CASE 
          WHEN t2.rn = 1 THEN t1.authority_price
          ELSE NULL
      END authority_price,
      t2.order_no, t2.order_kind
FROM tab1 AS t1
JOIN (
   SELECT order_kind, order_no, pay_authority_no,
          ROW_NUMBER() OVER (PARTITION BY pay_authority_no ORDER BY id) AS rn
   FROM tab2
) AS t2 ON t1.pay_authority_no = t2.pay_authority_no
ORDER BY t1.corp_code,t1.pay_authority_no

答案 1 :(得分:1)

您可以尝试这样的事情,

;WITH cte AS(
                SELECT t1.corp_code,t1.pay_authority_no,t1.authority_price,
                       t2.order_no,t2.order_kind,ROW_NUMBER() OVER(PARTITION BY authority_price ORDER BY corp_code) ROWN
                FROM   tab1 t1
                       INNER JOIN tab2 t2 ON  t2.pay_authority_no = t1.pay_authority_no )

SELECT corp_code,pay_authority_no,
        CASE 
            WHEN ROWN = 1 THEN authority_price 
            ELSE NULL
        END authority_price,
       order_no,order_kind
FROM   cte
ORDER BY corp_code,pay_authority_no

Live Demo

答案 2 :(得分:-1)

使用标准化 此技术删除数据库中的重复条目