Я хочу включить столбец логических флагов в мои результаты, чтобы обозначить наличие памятки «IN ##» для любого данного клиента.Например, в приведенных ниже таблицах BOB содержит 2 записки в таблице SEC.Я хочу вернуть INFlag = 1 для обеих строк, так как одна из его заметок содержит 'IN' (меня интересуют только пометки 'IN', поэтому операторы CASE обнуляют все остальное).
Я уже пробовалподсчет в выбранном случае и вложенные подзапросы, но лучшее, что я могу сделать, это пометить только строки с заметкой «IN».Я хочу пометить ВСЕ строки любого конкретного клиента при условии, что у них есть памятка «IN».
Две таблицы:
dbo.BASE
id name image
== ==== =====
1 BOB 001
2 RICK 002
3 JOE 003
4 BILL 004
5 KEVIN 005
dbo.SEC
id memo date
== ==== ======
1 IN20 4/1/19
1 ME 1/1/18
2 MO 1/1/18
3 IN18 6/1/17
3 MO 5/1/19
4 ME 1/1/16
5 ME 1/1/17
5 MO 8/1/17
5 MI 2/1/18
SELECT
b.name as [PName],
COUNT(s.memo) as [Memos],
CASE
WHEN s.memo like 'IN[0-9][0-9]'
THEN s.memo
ELSE NULL END
as [INID],
CASE
WHEN s.memo like 'IN[0-9][0-9]'
THEN s.date
ELSE NULL END
as [INDate],
<<<FLAG Column [INFlag]>>>
FROM
dbo.BASE b
join dbo.SEC s on b.id = s.id
...
Ожидаемый результат:
PName Memos INID INDate INFlag
===== ===== ==== ====== ======
BOB 2 IN20 4/1/19 1
BOB 2 NULL NULL 1
RICK 1 NULL NULL 0
JOE 2 IN18 6/1/17 1
JOE 2 NULL NULL 1
BILL 1 NULL NULL 0
KEVIN 3 NULL NULL 0
KEVIN 3 NULL NULL 0
KEVIN 3 NULL NULL 0
Клиенты RICK, BILL и KEVIN не имеют памятки «IN», поэтому я хочу пометить все результаты для них с INFlag = 0.Клиенты BOB и JOE имеют памятку «IN», поэтому любые строки с их именем получают INFlag = 1.