2016-06-08 106 views
2

我想要在sql查詢中連接2個表時然後在結果中 重複的列單元格其中一個重複條目變爲null。 我的第一個表是:SQl查詢加入並將重複列值設置爲null

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 

請解決此問題!

+2

總是標記sql服務器的版本 – FLICKER

+2

您可以使用'ROW_NUMBER()OVER(PARTITION BY authority_price ORDER BY任何...)'然後CASE語句,如'CASE WHEN RN = 1 THEN authority_price END'而不是選擇authority_price。 – ZLK

+0

我想要這個結果用於stimulreports.net,但是當stimulsoft reports.net設計器處理重複集合時,總和不成立。由於這個原因,必須總結爲零重複正確計算總金額 –

回答

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 
+0

非常感謝你giorgos-betsoss –

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

+0

非常感謝@pedram –

-1

使用標準化 這個技術去除重複條目的數據庫