2014-05-20 5 views
0

У меня есть запрос, который возвращает, например, это приводит кПолучить строки с некоторым нулевым значением во всех своих колонках

ID Name  Year Age 
0 NULL  2013 23 
1 Luis  NULL 24 
2 Jose  2010 NULL 
3 Fernando 2003 43 

Я хочу, чтобы все строки, если для некоторых столбцов (в данном случае имя, год, Возраст) по крайней мере одна строка имеет нулевое значение, иначе 0 строк. Например, в показанном примере я получаю 4 строки, потому что каждый столбец имеет хотя бы одно значение null.

С другой стороны:

ID Name  Year Age 
0 NULL  2013 23 
1 Luis  NULL 24 
2 Jose  2010 34 
3 Fernando 2003 43 

Возраст не имеет нулевые значения, так я получаю 0 строк.

Заранее благодарен!

ответ

4

Используйте это:

with cte as (
    select case when count(*)=count(year) or count(*) = count(name) or count(*)=count(age) then 0 else 1 end as val from data 
    ) 
    select data.* from data,cte where 1 = cte.val 
1

Версия @mrida совершенен, но я использовал КТР с расчетами подсчитывал только для облегчения поддержки.

/* test tables: 
create table t1 (ID int,Name varchar(100),[Year] int, Age int) 

insert t1 
select 0,NULL,2013,23 union all 
select 1,'Luis',NULL,24 union all 
select 2,'Jose',2010,NULL union all 
select 3,'Fernando',2003,43 

create table t2 (ID int,Name varchar(100),[Year] int, Age int) 

insert t2 
select 0,NULL,2013,23 union all 
select 1,'Luis',NULL,24 union all 
select 2,'Jose',2010,34 union all 
select 3,'Fernando',2003,43 
*/ 

--for Jose with undefined age 
with cte as (select count(*) as AllCount,count(year) as YearsCount,count(name) as NamesCount,count(age) as AgesCount from t1) 
select t1.* from t1,cte 
where not (cte.AllCount=cte.YearsCount or cte.AllCount=cte.NamesCount or cte.AllCount=cte.AgesCount) 

--for 34-aged Jose :) 
with cte as (select count(*) as AllCount,count(year) as YearsCount,count(name) as NamesCount,count(age) as AgesCount from t2) 
select t2.* from t2,cte 
where not (cte.AllCount=cte.YearsCount or cte.AllCount=cte.NamesCount or cte.AllCount=cte.AgesCount) 
Смежные вопросы