我有表1中的数据:
AgeCount Age GenderCount Gender RaceCount Race
-----------------------------------------------------------------------------
12 1-10 null null null null
10 11-20 null null null null
null null 3 M null null
null null 5 F null null
null null null null 20 American Indian
null null null null 10 Africa
我喜欢删除NULL
的查询,所以我会得到:
AgeCount Age GenderCount Gender RaceCount Race
----------------------------------------------------------------------------
12 1-10 3 M 20 American Indian
10 11-20 5 F 10 Africa
非null值可以按任何顺序连接。
我尝试过:
select *
from table1
where age is not null
or agecount is not null
or gendercount is not null
or gender is not null
or racecount is not null
or race is not null
但是它没有给出期望的结果。
答案 0 :(得分:1)
根据提供的信息,以下查询将产生所需的结果:
row_number()
给出任意连接条件full outer join
处理一种情况,即一种类型的值可能比另一种类型的值更多。如果您添加了另一行年龄计数 declare @Test table (AgeCount int, Age varchar(16), GenderCount int, Gender varchar(1), RaceCount int, Race varchar(64));
insert into @Test (AgeCount, Age, GenderCount, Gender, RaceCount, Race)
values (12, '1-10', null, null, null, null)
, (10, '11-20', null, null, null, null)
, (null, null, 3, 'M', null, null)
, (null, null, 5, 'F', null, null)
, (null, null, null, null, 20, 'American Indian')
, (null, null, null, null, 10, 'Africa');
select AgeCount, Age, GenderCount, Gender, RaceCount, Race
from (
select AgeCount, Age
, row_number() over (order by AgeCount) row#
from @Test
where AgeCount is not null
) X
full outer join
(
select GenderCount, Gender
, row_number() over (order by GenderCount) row#
from @Test
where GenderCount is not null
) Y on Y.row# = X.row#
full outer join (
select RaceCount, Race
, row_number() over (order by RaceCount) row#
from @Test
where RaceCount is not null
) Z on Z.row# = X.row#;
给出以下内容:
AgeCount Age GenderCount Gender RaceCount Race
-------------------------------------------------------------------
10 11-20 3 M 10 Africa
12 1-10 5 F 20 American Indian