복붙노트

[SQL] 결과 세트의 값을 반복하는 방송 블랭크

SQL

결과 세트의 값을 반복하는 방송 블랭크

아래의 쿼리에서 o.EventSetName, o.EventSetDisplay, o.EventSetDescription을 위해 - 언제든지 결과의 3 열은 중복 행이 - 첫 번째와 같은 행이 표시와 중복 행의 나머지 부분에 대한 비어 있어야합니다 ... ..

여기에 SQL은 다음과 같습니다

 Select  distinct top 100000 o.EventSetName,       
                             o.EventSetDisplay,
                             o.EventSetDescription,
                             o.ChildSetName,
                             ROW_NUMBER() Over (Order By f.ChildSetName) RN,
                             f.DocumentDispSequence,
                             f.SectionDispSequence,
                             o.ObsSetDispSequence,
                             null                          
                      From   ##ObsSetLevel o,
                             ##Final f
                      Where  f.ChildSetName = o.EventSetName and 
                             o.EventSetName = @variableName
                      Order By RN asc, f.DocumentDispSequence asc, f.SectionDispSequence asc, o.ObsSetDispSequence asc

지금보고 로직 요구의 많은이 저장된 프로 시저 자체에서 할 수 할 수 있도록보고 도구를 가지고 있겠지 ...

그래서 대신 :

val 1   val2    val3  val7
val 1   val2    val3  val8
val 1   val2    val3  val 10
val 1   val2    val3  x
val 1   val2    val3  y

나는 행의 처음 3 열에 공백으로 결과를 얻을 2,3,4 5한다

해결법

  1. ==============================

    1.값의 각 그룹에 대해 RN들을 만들 것이다 열,에 의해 ROW_NUMBER OVER 파티션을 추가 CTE에서 기존 쿼리를 감 쌉니다. 외부 쿼리에서 어디서 GRP_RN = 1, 빈 문자열이 다른 값을 선택 CASE를 사용합니다.

    값의 각 그룹에 대해 RN들을 만들 것이다 열,에 의해 ROW_NUMBER OVER 파티션을 추가 CTE에서 기존 쿼리를 감 쌉니다. 외부 쿼리에서 어디서 GRP_RN = 1, 빈 문자열이 다른 값을 선택 CASE를 사용합니다.

    WITH CTE AS 
    (
        Select  distinct top 100000 
            o.EventSetName,       
            o.EventSetDisplay,
            o.EventSetDescription,
            o.ChildSetName,
            ROW_NUMBER() Over (Order By f.ChildSetName) RN,
            f.DocumentDispSequence,
            f.SectionDispSequence,
            o.ObsSetDispSequence,
            null  as NullColumnNeedsName,
            ROW_NUMBER() OVER (PARTITION BY o.EventSetName, o.EventSetDisplay,o.EventSetDescription ORDER BY f.ChildSetName) GRP_RN
        From   ##ObsSetLevel o,
        INNER JOIN ##Final f ON f.ChildSetName = o.EventSetName and o.EventSetName = @variableName
    )
    SELECT
        CASE WHEN GRP_RN = 1 THEN o.EventSetName ELSE '' AS EventSetName,
        CASE WHEN GRP_RN = 1 THEN o.EventSetDisplay ELSE '' AS EventSetDisplay,
        CASE WHEN GRP_RN = 1 THEN o.EventSetDescription ELSE '' AS EventSetDescription,
        other columns
    FROM CTE  
    Order By RN asc, DocumentDispSequence asc, SectionDispSequence asc, o.ObsSetDispSequence asc
    

    PS : 나는 또한 이전 스타일의 사용 조인을 수정했다. 그 사용은 SQL-92 표준의 도입으로 20 년 전 구식이된다. 당신이 그들을 사용하지 않아야합니다.

  2. from https://stackoverflow.com/questions/18767504/shows-blanks-for-repeating-values-in-a-result-set by cc-by-sa and MIT license