Создайте представление, в котором, если строка существует в одной таблице, введите заданное значение, а если она существует в нескольких таблицах, введите «несколько».

Я пытаюсь создать представление SQL на основе основной таблицы и четырех таблиц активности. Существует четыре типа активности: Activity1, Activity2 и т. д.

Таблицы связаны первичным ключом основной таблицы. Таблицы активности связаны с ним как с внешним ключом. Первичный ключ может иметь несколько записей действий в одной таблице или несколько записей во многих таблицах действий.

Я хочу создать представление, в котором есть столбец для каждого первичного ключа, и если в нем есть какое-то количество записей только в одной таблице действий, тогда столбец будет содержать имя этого действия («Активность1», «Активность2» и т. д. ), и если он существует более чем в одной таблице действий, вместо этого указать «Несколько», а если он не существует ни в одной из этих таблиц, поставить «Нет».

Я пытался использовать EXISTS в SQL, но я не уверен, как использовать значение по умолчанию, такое как «Несколько» и «Нет», если существует более одной строки.

Это не проблема в С#, но мне нужно сделать это конкретно в представлении SQL, и я в недоумении.


person Austin Donley    schedule 19.10.2016    source источник
comment
показать правильную выборку данных и ожидаемый результат   -  person scaisEdge    schedule 19.10.2016


Ответы (1)


Я думаю, вам просто нужен оператор case, на ваш взгляд, например:

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
person Kostya    schedule 19.10.2016
comment
Это похоже на то, что мне нужно. Я проверю это и дам вам знать. - person Austin Donley; 20.10.2016