如果左侧包含空且右侧包含值,则在 sql 中向左移动单元格 [英] move cells left in sql if left contains null and right contains value

查看:9
本文介绍了如果左侧包含空且右侧包含值,则在 sql 中向左移动单元格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在 Sql 中,我得到如下格式的结果.我总共有 6 列.在第 1 行第 6 列包含值和第 2 行第 5 &6th 包含值.但是如果前一列不包含值意味着我需要在第一列中的值,我需要检查每个单元格.

In Sql I am getting the result like below format. Totally i have 6 columns. in 1st row 6th column contains the value and 2nd row 5th & 6th contains the value. But i need to check the every cells if previous column doesn't contain the value means i need that in 1st column.

实际结果

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

预期结果:-

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

请发表一些好的答案(我使用的是 SQL server 2008-R2)

Kindly post some Good answers (I am using SQL server 2008-R2)

推荐答案

另一种方式,类似于@Astander的(但使用OUTER APPLY而不是PIVOT/UNPIVOT):

Another way, similar to @Astander's (but using OUTER APPLY instead of 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-Fiddle

Test in SQL-FIddle

这篇关于如果左侧包含空且右侧包含值,则在 sql 中向左移动单元格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆