2016-06-08 1 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   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 
:

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 

난 결과는 다음과 같다 원하는

해결하십시오!

+2

항상 SQL 서버 버전 – FLICKER

+2

에 태그를 지정합니다. authority_price를 선택하는 대신'ROW_NUMBER() OVER (PARTITION BY authority_price ORDER BY whatever ...) '다음에'CASE WHEN RN = 1 THEN authority_price END'와 같은 CASE 문을 사용할 수 있습니다. – ZLK

+0

나는 stimulreports.net에이 결과를 사용하고 싶지만, stimulsoft reports.net 디자이너 프로세스에서 중복 된 집합을 병합 할 때는 총합이 맞지 않습니다. 이러한 이유로, 합계를 정확하게 계산하려면 총 1을 합산해야합니다. –

답변

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

사용 정상화 이 기술은 데이터베이스에 중복 항목을 제거

관련 문제