SQL — Количество и если/ либо в зависимости от значения столбца

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть две таблицы: таблица ШАБЛОНОВ с уникальными идентификаторами шаблонов электронной почты и именем

Идентификатор шаблона имя шаблона
1 Apple
2 река
3 Нулевой
4 телефон
5 дерево

и таблица СОСТОЯНИЯ, в которой отображаются отправленные электронные письма, ожидающие или неудачные. Он также имеет идентификатор шаблона, поэтому я знаю, какой шаблон электронной почты был использован

status_type Идентификатор шаблона
доставлен 1
рассматриваемый 1
провалившийся 1
доставлен 1
доставлен 2

Я хочу создать новую таблицу, которая показывает:

  • уникальный идентификатор шаблона
  • количество типов статуса на идентификатор шаблона (только количество, если статус = «доставлен»)
  • тип шаблона (возвращает «fra», если имя шаблона равно NULL, или «em»)

Комментарии:

1. Примеры данных великолепны, но вам также нужно указать ожидаемый результат.

Ответ №1:

Вы можете использовать inline query , как показано ниже.

 select  template_id, (select count(*) from Status s where s.Template_id=t.template_id AND  s.status_type='delivered') deliveredcount,  case when t.template_name is null then 'fra' else 'em' end as template_type from template t  

Или попробуйте ниже window function с distinct помощью .

 select distinct t.template_id, count (s.template_Id) over (partition by t.template_id) deliveredcount,  case when t.template_name is null then 'fra' else 'em' end as template_type from template t left join Status s on t.template_id=s.template_Id AND s.status_type='delivered'