【问题标题】:Create a view where if row exists in one table, put set value, and if it exists in multiple tables, put 'multiple'创建一个视图,如果行存在于一个表中,则放置设置值,如果它存在于多个表中,则放置“多个”
【发布时间】:2016-10-20 05:31:39
【问题描述】:

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

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

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

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

这在 C# 中不是问题,但我需要专门在 SQL 视图中完成它,我不知所措。

【问题讨论】:

  • 显示正确的数据样本和预期结果

标签: sql sql-server sql-view


【解决方案1】:

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

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

【讨论】:

  • 这看起来像我需要的。我会测试一下并告诉你。
猜你喜欢
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 2022-11-19
相关资源
最近更新 更多