2014-01-16 5 views
1

기존 SQL 쿼리를 수정 중입니다. 문제는 테이블의 설명을 기존 데이터에 추가하려고합니다. 그림에 표시된 것처럼 하위 쿼리를 추가했지만 반환 데이터 집합을 변경하는 것으로 보입니다. subquery를 사용하여 올바른 데이터를 얻는 방법을 제안 할 수 있습니까?조인의 SQL 하위 쿼리

SELECT TOP 100 
     ROW_NUMBER() OVER (ORDER BY LTRIM(VW_POLINDEX.SYMBOL) ASC, LTRIM(VW_POLINDEX.POLNUM) ASC, LTRIM(VW_POLINDEX.MODULE) ASC) AS RowNum 
     ,VW_POLINDEX.POLNUM 
     ,VW_POLINDEX.SYMBOL 
     ,VW_POLINDEX.MODULE 
     , 
     --Subquery: 1 This subquery will fetch the description based on the pol details 
     (SELECT TOP 1 
        reasonamendedCd 
      FROM  SHPolicyAmendmentHistory SH 
      WHERE  SH.PolicyNbr = VW_POLINDEX.POLNUM 
        AND SH.PolicySymbolCd = VW_POLINDEX.SYMBOL 
        AND SH.PolicyModuleNbr = Module 
      ORDER BY amendmentnbr DESC 
     ) AS POLSECRIPTION 
     ,VW_POLINDEX.CANCELLD 
FROM VW_POLINDEX WITH (NOLOCK) 
     INNER JOIN LINE_OF_BUS_LIT WITH (NOLOCK) ON VW_POLINDEX.LOB = LINE_OF_BUS_LIT.LOB_CD 
     INNER JOIN POL_STATUS_LIT WITH (NOLOCK) ON VW_POLINDEX.TYPEACT = POL_STATUS_LIT.POL_STATUS_CD 
WHERE (CASE VW_POLINDEX.MODULE 
      WHEN 0 THEN VW_POLINDEX.SYMBOL + '0' 
      ELSE VW_POLINDEX.SYMBOL + '1' 
      END) NOT IN ('RJD1', 'RJH1') 
     AND VW_POLINDEX.LOB = 'HP' 

전류 출력 :

+------+-------+------+------+-------------+---------+ 
|RowNum|POLNUM |SYMBOL|MODULE|POLSECRIPTION|CANCELLD | 
+------+-------+------+------+-------------+---------+ 
|3  |0040026|CCS |2  |<NULL>  |9/12/2006| 
+------+-------+------+------+-------------+---------+ 
|4  |0040026|CCS |3  |<NULL>  |9/12/2010| 
+------+-------+------+------+-------------+---------+ 
|2  |0040026|CCS |1  |<NULL>  |9/12/2006| 
+------+-------+------+------+-------------+---------+ 
|7  |2000010|CCS |2  |XM   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|8  |2000010|CCS |3  |CPP   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|12 |2000025|CCS |0  |RN   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|16 |2000025|CCS |4  |RN   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|6  |2000010|CCS |1  |IC   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|20 |2000029|CCS |1  |RN   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|10 |2000010|CCS |5  |CM   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|11 |2000010|CCS |6  |Z   |7/28/2013| 
+------+-------+------+------+-------------+---------+ 
|24 |2000029|CCS |5  |RN   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|14 |2000025|CCS |2  |RN   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 

예상 출력 (일부 행이 이전 출력에서 ​​누락도 아닌 하위 쿼리를 추가 한 후 정렬됩니다) :

+------+-------+------+------+-------------+---------+ 
|RowNum|POLNUM |SYMBOL|MODULE|POLSECRIPTION|CANCELLD | 
+------+-------+------+------+-------------+---------+ 
|1  |0040026|CCS |0  |test   |9/12/2006| 
+------+-------+------+------+-------------+---------+ 
|2  |0040026|CCS |1  |test   |9/12/2006| 
+------+-------+------+------+-------------+---------+ 
|3  |0040026|CCS |2  |test   |9/12/2006| 
+------+-------+------+------+-------------+---------+ 
|4  |0040026|CCS |3  |test   |9/12/2010| 
+------+-------+------+------+-------------+---------+ 
|5  |2000010|CCS |0  |test   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|6  |2000010|CCS |1  |test   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|7  |2000010|CCS |2  |test   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|8  |2000010|CCS |3  |test   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|9  |2000010|CCS |4  |test   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|10 |2000010|CCS |5  |test   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|11 |2000010|CCS |6  |test   |7/28/2013| 
+------+-------+------+------+-------------+---------+ 
|12 |2000025|CCS |0  |test   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|13 |2000025|CCS |1  |test   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|14 |2000025|CCS |2  |test   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|15 |2000025|CCS |3  |test   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
|16 |2000025|CCS |4  |test   |1/1/1753 | 
+------+-------+------+------+-------------+---------+ 
+0

구문이 SQL Server이므로이 태그를 제거했습니다. –

+0

출력이 정렬되지 않았기 때문에 출력이 정렬되지 않으므로 'SQL SERVER'가 원하는대로 반환 될 수 있습니다. 'ORDER BY' 절을 추가하십시오. 그리고 거기에'NOLOCK'을 원하십니까? –

+0

그래, 결과를 정렬 할 수 있지만 하위 쿼리를 추가하면 잘못된 데이터가 표시되고 정렬 후에도 일부 행이 누락됩니다. 또한 SHPolicyAmendmentHistory에서 상위 1 개를 가져와서 수정 날짜를 기반으로해야하므로 SHPolicyAmendmentHistory의 모든 열을 가져옴에 따라 조인이 도움이되는지 확실하지 않습니다. – user2814819

답변

3

왜 INNER JOIN에서 그 설명 테이블을 사용하지 않습니까? 좋아요

SELECT TOP 100 
     ROW_NUMBER() OVER (ORDER BY LTRIM(VW_POLINDEX.SYMBOL) ASC, LTRIM(VW_POLINDEX.POLNUM) ASC, LTRIM(VW_POLINDEX.MODULE) ASC) AS RowNum 
     ,VW_POLINDEX.POLNUM 
     ,VW_POLINDEX.SYMBOL 
     ,VW_POLINDEX.MODULE 
     ,VW_POLINDEX.CANCELLD 
     ,SH.reasonamendedCd 
FROM VW_POLINDEX WITH (NOLOCK) 
     INNER JOIN LINE_OF_BUS_LIT WITH (NOLOCK) ON VW_POLINDEX.LOB = LINE_OF_BUS_LIT.LOB_CD 
     INNER JOIN POL_STATUS_LIT WITH (NOLOCK) ON VW_POLINDEX.TYPEACT = POL_STATUS_LIT.POL_STATUS_CD 
     INNER JOIN SHPolicyAmendmentHistory SH ON SH.PolicyNbr = VW_POLINDEX.POLNUM 
                AND SH.PolicySymbolCd = VW_POLINDEX.SYMBOL 
                AND SH.PolicyModuleNbr = Module 
WHERE (CASE VW_POLINDEX.MODULE 
      WHEN 0 THEN VW_POLINDEX.SYMBOL + '0' 
      ELSE VW_POLINDEX.SYMBOL + '1' 
      END) NOT IN ('RJD1', 'RJH1') 
     AND VW_POLINDEX.LOB = 'HP' 
+0

응답 해 주셔서 감사합니다. SHPolicyAmendmentHistory는 여러 열을 반환 할 수 있습니다. amendmentnbr desc의 순서에 따라 상위 1 개가 필요합니다. – user2814819