Как выбрать отдельные столбцы и вернуть ненулевые значения

У меня есть много таблиц, которые имеют отношение к одной основной таблице. Я хочу иметь возможность присоединиться к этим таблицам, выбирая различные значения из каждой строки и возвращая только ненулевые значения, это возможно?

Например,

 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
Другие вопросы по тегам