创建一个视图,其中if行存在于一个表中,放置设置值,如果它存在于多个表中,则放置'multiple'

时间:2016-10-19 20:40:11

标签: sql sql-server sql-view

我正在尝试基于主表和四个活动表构建SQL视图。有四种活动类型,Activity1,Activity2等。

表格由主表的主键链接。活动表将其链接为外键。主键可能在同一个表中有多个活动记录,或者在许多活动表中有多个记录。

我想创建一个包含每个主键列的视图,如果它只在一个活动表中有任意数量的记录,那么该列将包含该活动的名称(“Activity1”,“Activity2”等等,如果它存在于多个活动表中而不是放置“多个”,并且如果它们都不存在于这些表中,则放入“无”。

我一直在尝试在SQL中使用EXISTS,但是如果存在多行,我不确定如何使用默认值,例如“Multiple”和“None”。

这在C#中不是问题,但我需要在SQL视图中专门完成它而且我很茫然。

1 个答案:

答案 0 :(得分:0)

我认为您只需要在您的视图中使用案例陈述,如:

select 

case when iif(a1.activity is null , 0,1) + iif(a2.activity is null , 0,1) +iif(a3.activity is null , 0,1)+iif(a4.activity is null , 0,1) > 1 then "Multiple" 
when iif(a1.activity is null , 0,1) + iif(a2.activity is null , 0,1) +iif(a3.activity is null , 0,1)+iif(a4.activity is null , 0,1) = 0 then "none"
else COALESCE ( a1.activity,a2.activity,a3.activity,a4.activity) end as [activity]

from main_table m
left join activity1_table a1
on m.key = a1.key
left join activity2_table a2
on m.key = a2.key
left join activity3_table a3
on m.key = a3.key
left join activity4_table a4
on m.key = a4.key