2016-10-19 1 views
0

J'essaie de créer une vue SQL, basée sur une table principale et quatre tables d'activité. Il existe quatre types d'activité, Activité1, Activité2, etc.Créez une vue où si la ligne existe dans une table, mettez la valeur définie et si elle existe dans plusieurs tables, mettez 'multiple'

Les tables sont liées par la clé primaire de la table principale. Les tables d'activité l'ont liée en tant que clé étrangère. Une clé primaire peut avoir plusieurs enregistrements d'activité dans la même table ou plusieurs enregistrements dans de nombreuses tables d'activité. Je veux créer une vue qui a une colonne pour chaque clé primaire, et si elle contient un nombre quelconque d'enregistrements dans une seule table d'activités, la colonne contiendra le nom de cette activité ("Activité1", "Activité2"). ", etc.) et s'il existe dans plus d'une table d'activités pour mettre" Multiple "à la place, et s'il n'existe dans aucune de ces tables pour mettre" None ".

J'ai essayé d'utiliser EXISTS en SQL mais je ne suis pas sûr de savoir comment utiliser une valeur par défaut telle que "Multiple" et "None" si plus d'une ligne existe.

Ce n'est pas un problème en C#, mais j'ai besoin de le faire dans une vue SQL spécifiquement et je suis à court de ressources.

+0

montrent un échantillon des données et de résultat attendu – scaisEdge

Répondre

0

Je pense que vous avez juste besoin d'une déclaration de cas dans votre vue comme:

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 
+0

Cela ressemble à ce que je dois. Je vais le tester et vous le faire savoir. –