복붙노트

[SQL] 이동 세포는 왼쪽이 null이 포함 된 경우 SQL에서 왼쪽과 오른쪽 값을 포함

SQL

이동 세포는 왼쪽이 null이 포함 된 경우 SQL에서 왼쪽과 오른쪽 값을 포함

SQL에서 나는 형식 다음과 같은 결과를 얻고있다. 완전히 내가 6 열 수 있습니다. 1 행 6 열의 값과 2 행 5를 포함 & 6은 값이 포함되어 있습니다. 하지만 난 이전 칼럼 내가 1 열에서 그 필요 값 수단을 포함하지 않는 경우 모든 세포를 확인해야합니다.

실제 결과

         a          b           c       d          e    f
                                                        1
                                                   1    2
                                        1          2    3

예상 결과:-

      a          b           c       d          e    f
      1                                             
      1          2                                        
      1          2           3                        

좋은 말 (I는 SQL 서버 2008 R2를 사용하고 있습니다) 몇 가지 좋은 답변을 게시

해결법

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

    1.Astander의 (그러나 OUTER를 사용하는 대신 PIVOT / UNPIVOT의 적용) @ 유사 또 다른 방법 :

    Astander의 (그러나 OUTER를 사용하는 대신 PIVOT / UNPIVOT의 적용) @ 유사 또 다른 방법 :

    SELECT
        a = MIN(CASE WHEN y.rn = 1 THEN y.val END),
        b = MIN(CASE WHEN y.rn = 2 THEN y.val END),
        c = MIN(CASE WHEN y.rn = 3 THEN y.val END),
        d = MIN(CASE WHEN y.rn = 4 THEN y.val END),
        e = MIN(CASE WHEN y.rn = 5 THEN y.val END),
        f = MIN(CASE WHEN y.rn = 6 THEN y.val END)
    FROM t
      OUTER APPLY
        ( SELECT
              x.val,
              rn = ROW_NUMBER() OVER (ORDER BY rn)
          FROM
          ( VALUES 
            (a,1), (b,2), (c,3), (d,4), (e,5), (f,6)
          ) x (val, rn) 
          WHERE x.val IS NOT NULL
        ) y 
    GROUP BY 
        t.tid ;
    

    SQL-바이올린의 테스트

  2. ==============================

    2.어떻게 같은 약

    어떻게 같은 약

    DECLARE @Table TABLE(
            a INT,
            b INT,
            c INT,
            d INT,
            e INT,
            f INT
    )
    
    INSERT INTO @Table VALUES 
    (null,null,null,null,null,10),
    (null,null,null,null,10,20),
    (null,null,null,10,20,30)
    
    SELECT  *
    FROM    @Table
    
    SELECT  SUM([1]) a,
            SUM([2]) b,
            SUM([3]) c,
            SUM([4]) d,
            SUM([5]) e,
            SUM([6]) f
    FROM    (
                SELECT  *,
                        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY (SELECT NULL)) ValID
                FROM    (
                            SELECT  *,
                                    ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) ID
                            FROM    @Table
                        ) p
                        UNPIVOT
                        (
                            val FOR col IN (a,b,c,d,e,f)
                        ) up
            ) v
            PIVOT (
                SUM(val) FOR ValID IN ([1],[2],[3],[4],[5],[6])
            ) p
    GROUP BY    ID
    
  3. from https://stackoverflow.com/questions/20781309/move-cells-left-in-sql-if-left-contains-null-and-right-contains-value by cc-by-sa and MIT license