【问题标题】:Sql Query to get only non null values in a row in Sql SeverSql Query在Sql Server中的一行中只获取非空值
【发布时间】:2015-05-29 02:53:01
【问题描述】:

如何获取只有非空值的列。

CTE1的输出是

ColA , ColB , ColC , ColD , ColE

1    , 2, NULL, NULL, NULL

所以我必须写一个 CTE2CTE1 (ColA to Col E) (ONLY ONE ROW ALWAYS) 作为输入 并仅返回非空值,即仅 ColA 和 ColB

请记住,非空值的数量可能会有所不同,我们有一个非空值列表,后跟空值。我只需要提取非空值

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

    试试这样的。

    这涉及UnpivotingPivotingDynamic Query

    declare @sql nvarchar(max),@col_list varchar(500)='' 
    
    ;WITH cte1 AS 
    (
    SELECT * 
    FROM   Yourtable )
    ,cte2 AS
    ( 
    SELECT col_name, 
           val 
    FROM   cte1 
    CROSS apply (VALUES 
                       ('cola',cola) 
                      ,('colb',colb)
                      ,('colc',colc)
                      ,('cold',cold)
                      ,('cole',cole) ) cs (col_name,val)) 
    
    SELECT @col_list += col_name+',' 
    FROM   cte2 
    WHERE  val IS NOT NULL
    
    SET @col_list = LEFT(@col_list,Len(@col_list)-1)
    
    SET @sql = '  ;with cte1 as 
                 (select * from tst  ),
                        cte2 as  
                 (select col_name,val from cte1    
                 cross apply (values(''cola'',cola),(''colb'',colb), 
                   (''colc'',colc),(''cold'',cold),(''cole'',cole)  ) cs
                  (col_name,val))  
               select* from cte2  
              pivot (max(val) for col_name in ('+@col_list+')) p'
    
    EXEC Sp_execute 
      @sql
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多