Как выбрать отдельные столбцы и вернуть ненулевые значения
У меня есть много таблиц, которые имеют отношение к одной основной таблице. Я хочу иметь возможность присоединиться к этим таблицам, выбирая различные значения из каждой строки и возвращая только ненулевые значения, это возможно?
Например,
ColA ColB ColC
Black 3 Car
Red 18 60
Вот мой запрос до сих пор:
SELECT DISTINCT FormTitle, FormSection FROM Table1 c
FULL OUTER JOIN Table2 l
ON c.FormSectionID = l.FormSectionID
FULL OUTER JOIN Table3 f
ON c.FormID = f.FormID
Я хочу, чтобы столбец FormTitle имел все отличные и ненулевые значения и то же самое для столбца FormSection и т. Д.
Вот мои результаты, когда я добавляю, ГДЕ FormTitle НЕ НЕДЕЙСТВИТЕЛЬНО, а FormSection НЕ НУЛЬ
FormTitle FormSection
Activities Activities
Annual Program Data Demographic Demographics
Annual Program Data Screening and Outreach Other Diseases (Not Eligible for RECA)
Annual Program Data Screening and Outreach Outreach/Education Encounters
Annual Program Data Screening and Outreach Program Activities by Type
Annual Program Data Screening and Outreach RECA-Eligible Diseases by Exposure Category
2 ответа
При работе с NULL используйте IS NULL
или IS NOT NULL
SELECT DISTINCT FormTitle, FormSection
FROM Table1 c
FULL OUTER JOIN Table2 l
ON c.FormSectionID = l.FormSectionID
FULL OUTER JOIN Table3 f
ON c.FormID = f.FormID
WHERE FormTitle IS NOT NULL
AND FormSection IS NOT NULL
Это странная просьба, но это можно сделать. Производительность на чем-то подобном не будет впечатляющей, но на небольшом наборе данных это не должно быть большой проблемой. Я использовал ваш пример, размещенный, чтобы помочь. Было бы очень полезно, если бы вы могли опубликовать ddl и sample в таком формате, как этот.
if OBJECT_ID('tempdb..#Something') is not null
drop table #Something
create table #Something
(
Title varchar(50),
FormSection varchar(50)
)
insert #Something
select 'Activities', 'Activities' union all
select 'Annual Program Data Demographic', 'Demographics' union all
select 'Annual Program Data Screening and Outreach', 'Other Diseases (Not Eligible for RECA)' union all
select 'Annual Program Data Screening and Outreach', 'Outreach/Education Encounters' union all
select 'Annual Program Data Screening and Outreach', 'Program Activities by Type' union all
select 'Annual Program Data Screening and Outreach', 'RECA-Eligible Diseases by Exposure Category';
with Titles as
(
select Title, ROW_NUMBER() over (order by (select null)) as RowNum
from #Something
group by Title
)
, FormSections as
(
select FormSection, ROW_NUMBER() over (order by (select null)) as RowNum
from #Something
group by FormSection
)
select FormSection, Title
from
(
select FormSection, Title
from FormSections fs
left join Titles t on fs.RowNum = t.RowNum
union all
select FormSection, Title
from Titles t
left join FormSections fs on fs.RowNum = t.RowNum
) x
group by FormSection, Title