当前位置: 代码迷 >> Sql Server >> 求sql语句,过滤列中的重复数据解决方案
  详细解决方案

求sql语句,过滤列中的重复数据解决方案

热度:89   发布时间:2016-04-24 10:30:10.0
求sql语句,过滤列中的重复数据
比如我查询出来的是:
name   col1        col2 
 a             正常      NULL
 a             NULL   正常
b             正常      NULL
b             NULL    不正常

这些数据是存放在临时表里的,最好不要使用创建表的形式  类似  create table A 什么的。


我怎么得到
name  col1   col2
a           正常  正常
b          正常  不正常


------解决方案--------------------
select name,max(   col1)col1,max(col2 )col2
from tb
group by name
------解决方案--------------------
 -----------------------------------------查询-------------------------------

;WITH t(name,col1,col2)AS
(
SELECT  'a','正常','NULL' UNION ALL
SELECT   'a','NULL','正常' UNION ALL
SELECT   'b','正常','NULL' UNION ALL
SELECT   'b','NULL','不正常' 
)
SELECT name,MAX(col1) col1,MAX(col2)col2 FROM t   GROUP BY name 

 -----------------------------------------结果-------------------------------

/*
name col1 col2
---- ---- ------
a    正常   正常
b    正常   不正常

(2 行受影响)
*/

------解决方案--------------------
感觉像是在做行列转换的时候没有转好儿产生的结果集
------解决方案--------------------
看看你在生成这个结果集之前的语句是怎么做的?
应该在生成这个结果集之前就能够用聚合函数消除这个NULL值

------解决方案--------------------
版主大大说的对,如果LZ的每列的数据除了正常和NULL以外没有别的,就可以用通过聚合函数的方式,去掉不需要的行。
------解决方案--------------------
如果是行转列的话用case when 可以,如果就这样上面的数据,版主已经给出了答案了
  相关解决方案